Fix a typo.
[bpt/emacs.git] / man / frames.texi
CommitLineData
6bf7aab6 1@c This is part of the Emacs manual.
6ca0edfe
DL
2@c Copyright (C) 1985, 86, 87, 93, 94, 95, 97, 99, 2000
3@c Free Software Foundation, Inc.
6bf7aab6
DL
4@c See file emacs.texi for copying conditions.
5@node Frames, International, Windows, Top
6@chapter Frames and X Windows
7@cindex frames
8
9 When using the X Window System, you can create multiple windows at the
10X level in a single Emacs session. Each X window that belongs to Emacs
11displays a @dfn{frame} which can contain one or several Emacs windows.
12A frame initially contains a single general-purpose Emacs window which
13you can subdivide vertically or horizontally into smaller windows. A
14frame normally contains its own echo area and minibuffer, but you can
15make frames that don't have these---they use the echo area and
16minibuffer of another frame.
17
18 Editing you do in one frame also affects the other frames. For
19instance, if you put text in the kill ring in one frame, you can yank it
20in another frame. If you exit Emacs through @kbd{C-x C-c} in one frame,
21it terminates all the frames. To delete just one frame, use @kbd{C-x 5
220}.
23
24 To avoid confusion, we reserve the word ``window'' for the
25subdivisions that Emacs implements, and never use it to refer to a
26frame.
27
28 Emacs compiled for MS-DOS emulates some aspects of the window system
29so that you can use many of the features described in this chapter.
30@xref{MS-DOS Input}, for more information.
31
70c88b57
DL
32@cindex MS Windows
33 Emacs compiled for MS Windows mostly supports the same features as
34under X.
35
36Features which rely on text in multiple faces (such as Font Lock mode)
37will also work on non-windowed terminals that can display more than one
38face, whether by colors or underlining and emboldening, such as the
39Linux console. Emacs determines automatically whether the terminal has
40such support.
41
6bf7aab6
DL
42@menu
43* Mouse Commands:: Moving, cutting, and pasting, with the mouse.
44* Secondary Selection:: Cutting without altering point and mark.
45* Mouse References:: Using the mouse to select an item from a list.
46* Menu Mouse Clicks:: Mouse clicks that bring up menus.
47* Mode Line Mouse:: Mouse clicks on the mode line.
48* Speedbar:: How to make and use a speedbar frame.
49* Creating Frames:: Creating additional Emacs frames with various contents.
50* Multiple Displays:: How one Emacs job can talk to several displays.
51* Special Buffer Frames:: You can make certain buffers have their own frames.
52* Frame Parameters:: Changing the colors and other modes of frames.
53* Scroll Bars:: How to enable and disable scroll bars; how to use them.
70c88b57 54* Wheeled Mice:: Using mouse wheels for scrolling.
6bf7aab6 55* Menu Bars:: Enabling and disabling the menu bar.
70c88b57
DL
56@c * Tool Bars:: Enabling and disabling the tool bar.
57* Dialog Boxes:: Controlling use of dialog boxes.
6bf7aab6
DL
58* Faces:: How to change the display style using faces.
59* Font Lock:: Minor mode for syntactic highlighting using faces.
60* Support Modes:: Font Lock support modes make Font Lock faster.
61* Highlight Changes:: Using colors to show where you changed the buffer.
c5feaf54 62* Highlight Interactively:: Tell Emacs what text to highlight.
70c88b57
DL
63* Trailing Whitespace:: Showing possibly-spurious trailing whitespace.
64* Tooltips:: Showing `tooltips', AKA `ballon help' for active text.
43391ff3 65* Mouse Avoidance:: Moving the mouse pointer out of the way.
70c88b57 66* Misc X:: Iconifying and deleting frames.
6bf7aab6 67* Non-Window Terminals:: Multiple frames on terminals that show only one.
70c88b57 68* XTerm Mouse:: Using the mouse in an XTerm terminal emulator.
6bf7aab6
DL
69@end menu
70
71@node Mouse Commands
72@section Mouse Commands for Editing
73@cindex mouse buttons (what they do)
74
75 The mouse commands for selecting and copying a region are mostly
76compatible with the @code{xterm} program. You can use the same mouse
77commands for copying between Emacs and other X client programs.
78
79@kindex DELETE
80 If you select a region with any of these mouse commands, and then
81immediately afterward type the @key{DELETE} function key, it deletes the
82region that you selected. The @key{BACKSPACE} function key and the
83ASCII character @key{DEL} do not do this; if you type any other key
84in between the mouse command and @key{DELETE}, it does not do this.
85
86@findex mouse-set-region
87@findex mouse-set-point
88@findex mouse-yank-at-click
89@findex mouse-save-then-click
90@kindex Mouse-1
91@kindex Mouse-2
92@kindex Mouse-3
93@table @kbd
94@item Mouse-1
95Move point to where you click (@code{mouse-set-point}).
96This is normally the left button.
97
98@item Drag-Mouse-1
99Set the region to the text you select by dragging, and copy it to the
100kill ring (@code{mouse-set-region}). You can specify both ends of the
101region with this single command.
102
103@vindex mouse-scroll-min-lines
104If you move the mouse off the top or bottom of the window while
105dragging, the window scrolls at a steady rate until you move the mouse
106back into the window. This way, you can select regions that don't fit
107entirely on the screen. The number of lines scrolled per step depends
108on how far away from the window edge the mouse has gone; the variable
109@code{mouse-scroll-min-lines} specifies a minimum step size.
110
111@item Mouse-2
112Yank the last killed text, where you click (@code{mouse-yank-at-click}).
113This is normally the middle button.
114
115@item Mouse-3
116This command, @code{mouse-save-then-kill}, has several functions
117depending on where you click and the status of the region.
118
119The most basic case is when you click @kbd{Mouse-1} in one place and
120then @kbd{Mouse-3} in another. This selects the text between those two
121positions as the region. It also copies the new region to the kill
122ring, so that you can copy it to someplace else.
123
124If you click @kbd{Mouse-1} in the text, scroll with the scroll bar, and
125then click @kbd{Mouse-3}, it remembers where point was before scrolling
126(where you put it with @kbd{Mouse-1}), and uses that position as the
127other end of the region. This is so that you can select a region that
128doesn't fit entirely on the screen.
129
130More generally, if you do not have a highlighted region, @kbd{Mouse-3}
131selects the text between point and the click position as the region. It
132does this by setting the mark where point was, and moving point to where
133you click.
134
135If you have a highlighted region, or if the region was set just before
136by dragging button 1, @kbd{Mouse-3} adjusts the nearer end of the region
137by moving it to where you click. The adjusted region's text also
138replaces the old region's text in the kill ring.
139
140If you originally specified the region using a double or triple
141@kbd{Mouse-1}, so that the region is defined to consist of entire words
142or lines, then adjusting the region with @kbd{Mouse-3} also proceeds by
143entire words or lines.
144
145If you use @kbd{Mouse-3} a second time consecutively, at the same place,
146that kills the region already selected.
147
148@item Double-Mouse-1
149This key sets the region around the word which you click on. If you
150click on a character with ``symbol'' syntax (such as underscore, in C
151mode), it sets the region around the symbol surrounding that character.
152
153If you click on a character with open-parenthesis or close-parenthesis
154syntax, it sets the region around the parenthetical grouping (sexp)
155which that character starts or ends. If you click on a character with
156string-delimiter syntax (such as a singlequote or doublequote in C), it
157sets the region around the string constant (using heuristics to figure
158out whether that character is the beginning or the end of it).
159
160@item Double-Drag-Mouse-1
161This key selects a region made up of the words you drag across.
162
163@item Triple-Mouse-1
164This key sets the region around the line you click on.
165
166@item Triple-Drag-Mouse-1
167This key selects a region made up of the lines you drag across.
168@end table
169
170 The simplest way to kill text with the mouse is to press @kbd{Mouse-1}
171at one end, then press @kbd{Mouse-3} twice at the other end.
172@xref{Killing}. To copy the text into the kill ring without deleting it
173from the buffer, press @kbd{Mouse-3} just once---or just drag across the
174text with @kbd{Mouse-1}. Then you can copy it elsewhere by yanking it.
175
176@vindex mouse-yank-at-point
177 To yank the killed or copied text somewhere else, move the mouse there
178and press @kbd{Mouse-2}. @xref{Yanking}. However, if
179@code{mouse-yank-at-point} is non-@code{nil}, @kbd{Mouse-2} yanks at
180point. Then it does not matter where you click, or even which of the
181frame's windows you click on. The default value is @code{nil}. This
182variable also affects yanking the secondary selection.
183
184@cindex cutting and X
185@cindex pasting and X
186@cindex X cutting and pasting
187 To copy text to another X window, kill it or save it in the kill ring.
188Under X, this also sets the @dfn{primary selection}. Then use the
189``paste'' or ``yank'' command of the program operating the other window
190to insert the text from the selection.
191
192 To copy text from another X window, use the ``cut'' or ``copy'' command
193of the program operating the other window, to select the text you want.
194Then yank it in Emacs with @kbd{C-y} or @kbd{Mouse-2}.
195
196 These cutting and pasting commands also work on MS-Windows.
197
198@cindex primary selection
199@cindex cut buffer
200@cindex selection, primary
201@vindex x-cut-buffer-max
202 When Emacs puts text into the kill ring, or rotates text to the front
203of the kill ring, it sets the @dfn{primary selection} in the X server.
204This is how other X clients can access the text. Emacs also stores the
205text in the cut buffer, but only if the text is short enough
206(@code{x-cut-buffer-max} specifies the maximum number of characters);
207putting long strings in the cut buffer can be slow.
208
209 The commands to yank the first entry in the kill ring actually check
210first for a primary selection in another program; after that, they check
211for text in the cut buffer. If neither of those sources provides text
212to yank, the kill ring contents are used.
213
214@node Secondary Selection
215@section Secondary Selection
216@cindex secondary selection
217
218 The @dfn{secondary selection} is another way of selecting text using
219X. It does not use point or the mark, so you can use it to kill text
220without setting point or the mark.
221
222@table @kbd
223@findex mouse-set-secondary
224@kindex M-Drag-Mouse-1
225@item M-Drag-Mouse-1
226Set the secondary selection, with one end at the place where you press
227down the button, and the other end at the place where you release it
228(@code{mouse-set-secondary}). The highlighting appears and changes as
229you drag.
230
231If you move the mouse off the top or bottom of the window while
232dragging, the window scrolls at a steady rate until you move the mouse
233back into the window. This way, you can mark regions that don't fit
234entirely on the screen.
235
236@findex mouse-start-secondary
237@kindex M-Mouse-1
238@item M-Mouse-1
239Set one endpoint for the @dfn{secondary selection}
240(@code{mouse-start-secondary}).
241
242@findex mouse-secondary-save-then-kill
243@kindex M-Mouse-3
244@item M-Mouse-3
245Make a secondary selection, using the place specified with @kbd{M-Mouse-1}
246as the other end (@code{mouse-secondary-save-then-kill}). A second click
247at the same place kills the secondary selection just made.
248
249@findex mouse-yank-secondary
250@kindex M-Mouse-2
251@item M-Mouse-2
252Insert the secondary selection where you click
253(@code{mouse-yank-secondary}). This places point at the end of the
254yanked text.
255@end table
256
257Double or triple clicking of @kbd{M-Mouse-1} operates on words and
258lines, much like @kbd{Mouse-1}.
259
260If @code{mouse-yank-at-point} is non-@code{nil}, @kbd{M-Mouse-2}
261yanks at point. Then it does not matter precisely where you click; all
262that matters is which window you click on. @xref{Mouse Commands}.
263
264@node Mouse References
265@section Following References with the Mouse
266@kindex Mouse-2 @r{(selection)}
267
268 Some Emacs buffers display lists of various sorts. These include
269lists of files, of buffers, of possible completions, of matches for
270a pattern, and so on.
271
272 Since yanking text into these buffers is not very useful, most of them
273define @kbd{Mouse-2} specially, as a command to use or view the item you
274click on.
275
276 For example, if you click @kbd{Mouse-2} on a file name in a Dired
277buffer, you visit that file. If you click @kbd{Mouse-2} on an error
278message in the @samp{*Compilation*} buffer, you go to the source code
279for that error message. If you click @kbd{Mouse-2} on a completion in
280the @samp{*Completions*} buffer, you choose that completion.
281
282 You can usually tell when @kbd{Mouse-2} has this special sort of
283meaning because the sensitive text highlights when you move the mouse
284over it.
285
286@node Menu Mouse Clicks
287@section Mouse Clicks for Menus
288
289 Mouse clicks modified with the @key{CTRL} and @key{SHIFT} keys
290bring up menus.
291
6bf7aab6
DL
292@table @kbd
293@item C-Mouse-1
239e21e2
DL
294@kindex C-Mouse-1
295@findex msb-mode
296@cindex MSB minor mode
297@cindex mode, MSB
6bf7aab6
DL
298This menu is for selecting a buffer.
299
239e21e2
DL
300The MSB (`mouse select buffer') global minor mode alters this menu to a
301form some people prefer and which is customizable. See the Custom group
302@code{msb}.
303
6bf7aab6 304@item C-Mouse-2
239e21e2 305@kindex C-Mouse-2
6bf7aab6
DL
306This menu is for specifying faces and other text properties
307for editing formatted text. @xref{Formatted Text}.
308
309@item C-Mouse-3
239e21e2
DL
310@kindex C-Mouse-3
311This menu is mode-specific. For most modes if Menu-bar mode is on, this
312menu has the same items as all the mode-specific menu-bar menus put
313together. Some modes may specify a different menu for this
314button.@footnote{Some systems use @kbd{Mouse-3} for a mode-specific
315menu. We took a survey of users, and found they preferred to keep
316@kbd{Mouse-3} for selecting and killing regions. Hence the decision to
317use @kbd{C-Mouse-3} for this menu.} If Menu-bar mode is off, this menu
318contains all the items which would be present in the menu bar---not just
319the mode-specific ones---so that you can access them without having to
320display the menu bar.
6bf7aab6
DL
321
322@item S-mouse-1
323This menu is for specifying the frame's principal font.
324@end table
325
326@node Mode Line Mouse
327@section Mode Line Mouse Commands
239e21e2
DL
328@cindex mode line, mouse
329@cindex mouse on mode line
6bf7aab6
DL
330
331 You can use mouse clicks on window mode lines to select and manipulate
332windows.
333
334@table @kbd
335@item Mouse-1
239e21e2 336@kindex mode-line mouse-1
6bf7aab6
DL
337@kbd{Mouse-1} on a mode line selects the window above. By dragging
338@kbd{Mouse-1} on the mode line, you can move it, thus changing the
339height of the windows above and below.
340
341@item Mouse-2
239e21e2 342@kindex mode-line mouse-2
6bf7aab6
DL
343@kbd{Mouse-2} on a mode line expands that window to fill its frame.
344
345@item Mouse-3
239e21e2 346@kindex mode-line mouse-3
6bf7aab6
DL
347@kbd{Mouse-3} on a mode line deletes the window above.
348
349@item C-Mouse-2
239e21e2 350@kindex mode-line C-mouse-2
6bf7aab6
DL
351@kbd{C-Mouse-2} on a mode line splits the window above
352horizontally, above the place in the mode line where you click.
353@end table
354
239e21e2 355@kindex vertical-scroll-bar mouse-1
6bf7aab6
DL
356 @kbd{C-Mouse-2} on a scroll bar splits the corresponding window
357vertically. @xref{Split Window}.
358
70c88b57
DL
359The commands above apply to areas of the mode line which do not have
360mouse bindings of their own. Normally some areas, such as those
361displaying the buffer name and the major mode name, have their own mouse
362bindings. Help on these bindings is echoed when the mouse is positioned
363over them.
364
6bf7aab6
DL
365@node Creating Frames
366@section Creating Frames
367@cindex creating frames
368
369@kindex C-x 5
370 The prefix key @kbd{C-x 5} is analogous to @kbd{C-x 4}, with parallel
371subcommands. The difference is that @kbd{C-x 5} commands create a new
372frame rather than just a new window in the selected frame (@pxref{Pop
373Up Window}). If an existing visible or iconified frame already displays
374the requested material, these commands use the existing frame, after
375raising or deiconifying as necessary.
376
377 The various @kbd{C-x 5} commands differ in how they find or create the
378buffer to select:
379
380@table @kbd
dc96827f
DL
381@item C-x 5 1
382@kindex C-x 5 1
383@findex delete-other-frames
384Delete all frames except the selected one (@code{delete-other-frames}).
6bf7aab6
DL
385@item C-x 5 2
386@kindex C-x 5 2
387@findex make-frame-command
388Create a new frame (@code{make-frame-command}).
389@item C-x 5 b @var{bufname} @key{RET}
390Select buffer @var{bufname} in another frame. This runs
391@code{switch-to-buffer-other-frame}.
392@item C-x 5 f @var{filename} @key{RET}
393Visit file @var{filename} and select its buffer in another frame. This
394runs @code{find-file-other-frame}. @xref{Visiting}.
395@item C-x 5 d @var{directory} @key{RET}
396Select a Dired buffer for directory @var{directory} in another frame.
397This runs @code{dired-other-frame}. @xref{Dired}.
398@item C-x 5 m
399Start composing a mail message in another frame. This runs
400@code{mail-other-frame}. It is the other-frame variant of @kbd{C-x m}.
401@xref{Sending Mail}.
402@item C-x 5 .
403Find a tag in the current tag table in another frame. This runs
404@code{find-tag-other-frame}, the multiple-frame variant of @kbd{M-.}.
405@xref{Tags}.
406@item C-x 5 r @var{filename} @key{RET}
407@kindex C-x 5 r
408@findex find-file-read-only-other-frame
409Visit file @var{filename} read-only, and select its buffer in another
410frame. This runs @code{find-file-read-only-other-frame}.
411@xref{Visiting}.
412@end table
413
414@cindex default-frame-alist
415@cindex initial-frame-alist
416 You can control the appearance of new frames you create by setting the
417frame parameters in @code{default-frame-alist}. You can use the
418variable @code{initial-frame-alist} to specify parameters that affect
419only the initial frame. @xref{Initial Parameters,,, elisp, The Emacs
420Lisp Reference Manual}, for more information.
421
422@cindex font (default)
423 The easiest way to specify the principal font for all your Emacs
424frames is with an X resource (@pxref{Font X}), but you can also do it by
425modifying @code{default-frame-alist} to specify the @code{font}
426parameter, as shown here:
427
428@example
429(add-to-list 'default-frame-alist '(font . "10x20"))
430@end example
431
432@node Speedbar
433@section Making and Using a Speedbar Frame
434@cindex speedbar
435
436 An Emacs frame can have a @dfn{speedbar}, which is a vertical window
437that serves as a scrollable menu of files you could visit and tags
438within those files. To create a speedbar, type @kbd{M-x speedbar}; this
439creates a speedbar window for the selected frame. From then on, you can
440click on a file name in the speedbar to visit that file in the
441corresponding Emacs frame, or click on a tag name to jump to that tag in
442the Emacs frame.
443
444 Initially the speedbar lists the immediate contents of the current
445directory, one file per line. Each line also has a box, @samp{[+]} or
446@samp{<+>}, that you can click on with @kbd{Mouse-2} to ``open up'' the
447contents of that item. If the line names a directory, opening it adds
448the contents of that directory to the speedbar display, underneath the
449directory's own line. If the line lists an ordinary file, opening it up
450adds a list of the tags in that file to the speedbar display. When a
451file is opened up, the @samp{[+]} changes to @samp{[-]}; you can click
452on that box to ``close up'' that file (hide its contents).
453
454 Some major modes, including Rmail mode, Info, and GUD, have
455specialized ways of putting useful items into the speedbar for you to
456select. For example, in Rmail mode, the speedbar shows a list of Rmail
457files, and lets you move the current message to another Rmail file by
458clicking on its @samp{<M>} box.
459
460 A speedbar belongs to one Emacs frame, and always operates on that
461frame. If you use multiple frames, you can make a speedbar for some or
462all of the frames; type @kbd{M-x speedbar} in any given frame to make a
463speedbar for it.
464
465@node Multiple Displays
466@section Multiple Displays
467@cindex multiple displays
468
469 A single Emacs can talk to more than one X Windows display.
470Initially, Emacs uses just one display---the one specified with the
60a96371 471@env{DISPLAY} environment variable or with the @samp{--display} option
6bf7aab6
DL
472(@pxref{Initial Options}). To connect to another display, use the
473command @code{make-frame-on-display}:
474
475@findex make-frame-on-display
476@table @kbd
477@item M-x make-frame-on-display @key{RET} @var{display} @key{RET}
478Create a new frame on display @var{display}.
479@end table
480
481 A single X server can handle more than one screen. When you open
482frames on two screens belonging to one server, Emacs knows they share a
483single keyboard, and it treats all the commands arriving from these
484screens as a single stream of input.
485
486 When you open frames on different X servers, Emacs makes a separate
487input stream for each server. This way, two users can type
488simultaneously on the two displays, and Emacs will not garble their
489input. Each server also has its own selected frame. The commands you
490enter with a particular X server apply to that server's selected frame.
491
492 Despite these features, people using the same Emacs job from different
493displays can still interfere with each other if they are not careful.
494For example, if any one types @kbd{C-x C-c}, that exits the Emacs job
495for all of them!
496
497@node Special Buffer Frames
498@section Special Buffer Frames
499
500@vindex special-display-buffer-names
501 You can make certain chosen buffers, for which Emacs normally creates
502a second window when you have just one window, appear in special frames
503of their own. To do this, set the variable
504@code{special-display-buffer-names} to a list of buffer names; any
505buffer whose name is in that list automatically gets a special frame,
506when an Emacs command wants to display it ``in another window.''
507
508 For example, if you set the variable this way,
509
510@example
511(setq special-display-buffer-names
512 '("*Completions*" "*grep*" "*tex-shell*"))
513@end example
514
515@noindent
516then completion lists, @code{grep} output and the @TeX{} mode shell
517buffer get individual frames of their own. These frames, and the
518windows in them, are never automatically split or reused for any other
519buffers. They continue to show the buffers they were created for,
520unless you alter them by hand. Killing the special buffer deletes its
521frame automatically.
522
523@vindex special-display-regexps
524 More generally, you can set @code{special-display-regexps} to a list
525of regular expressions; then a buffer gets its own frame if its name
526matches any of those regular expressions. (Once again, this applies only
527to buffers that normally get displayed for you in a separate window.)
528
529@vindex special-display-frame-alist
530 The variable @code{special-display-frame-alist} specifies the frame
531parameters for these frames. It has a default value, so you don't need
532to set it.
533
534 For those who know Lisp, an element of
535@code{special-display-buffer-names} or @code{special-display-regexps}
536can also be a list. Then the first element is the buffer name or
537regular expression; the rest of the list specifies how to create the
538frame. It can be an association list specifying frame parameter values;
539these values take precedence over parameter values specified in
540@code{special-display-frame-alist}. Alternatively, it can have this
541form:
542
543@example
544(@var{function} @var{args}...)
545@end example
546
547@noindent
548where @var{function} is a symbol. Then the frame is constructed by
549calling @var{function}; its first argument is the buffer, and its
550remaining arguments are @var{args}.
551
552 An analogous feature lets you specify buffers which should be
553displayed in the selected window. @xref{Force Same Window}. The
554same-window feature takes precedence over the special-frame feature;
555therefore, if you add a buffer name to
556@code{special-display-buffer-names} and it has no effect, check to see
557whether that feature is also in use for the same buffer name.
558
559@node Frame Parameters
560@section Setting Frame Parameters
561@cindex colors
562@cindex Auto-Raise mode
563@cindex Auto-Lower mode
564
565 This section describes commands for altering the display style and
566window management behavior of the selected frame.
567
568@findex set-foreground-color
569@findex set-background-color
570@findex set-cursor-color
571@findex set-mouse-color
572@findex set-border-color
573@findex auto-raise-mode
574@findex auto-lower-mode
575@table @kbd
576@item M-x set-foreground-color @key{RET} @var{color} @key{RET}
577Specify color @var{color} for the foreground of the selected frame.
578(This also changes the foreground color of the default face.)
579
580@item M-x set-background-color @key{RET} @var{color} @key{RET}
581Specify color @var{color} for the background of the selected frame.
582(This also changes the background color of the default face.)
583
584@item M-x set-cursor-color @key{RET} @var{color} @key{RET}
585Specify color @var{color} for the cursor of the selected frame.
586
587@item M-x set-mouse-color @key{RET} @var{color} @key{RET}
588Specify color @var{color} for the mouse cursor when it is over the
589selected frame.
590
591@item M-x set-border-color @key{RET} @var{color} @key{RET}
592Specify color @var{color} for the border of the selected frame.
593
594@item M-x list-colors-display
595Display the defined color names and show what the colors look like.
596This command is somewhat slow.
597
598@item M-x auto-raise-mode
599Toggle whether or not the selected frame should auto-raise. Auto-raise
600means that every time you move the mouse onto the frame, it raises the
601frame.
602
603Note that this auto-raise feature is implemented by Emacs itself. Some
604window managers also implement auto-raise. If you enable auto-raise for
605Emacs frames in your X window manager, it should work, but it is beyond
606Emacs's control and therefore @code{auto-raise-mode} has no effect on
607it.
608
609@item M-x auto-lower-mode
610Toggle whether or not the selected frame should auto-lower.
611Auto-lower means that every time you move the mouse off the frame,
612the frame moves to the bottom of the stack of X windows.
613
614The command @code{auto-lower-mode} has no effect on auto-lower
615implemented by the X window manager. To control that, you must use
616the appropriate window manager features.
617
618@findex set-frame-font
619@item M-x set-frame-font @key{RET} @var{font} @key{RET}
620@cindex font (principal)
621Specify font @var{font} as the principal font for the selected frame.
622The principal font controls several face attributes of the
623@code{default} face (@pxref{Faces}). For example, if the principal font
624has a height of 12 pt, all text will be drawn in 12 pt fonts, unless you
625use another face that specifies a different height. @xref{Font X}, for
626ways to list the available fonts on your system.
627
628@kindex S-Mouse-1
629You can also set a frame's principal font through a pop-up menu.
630Press @kbd{S-Mouse-1} to activate this menu.
631@end table
632
633 In Emacs versions that use an X toolkit, the color-setting and
634font-setting functions don't affect menus and the menu bar, since they
635are displayed by their own widget classes. To change the appearance of
636the menus and menu bar, you must use X resources (@pxref{Resources X}).
637@xref{Colors X}, regarding colors. @xref{Font X}, regarding choice of
638font.
639
640 For information on frame parameters and customization, see @ref{Frame
641Parameters,,, elisp, The Emacs Lisp Reference Manual}.
642
643@node Scroll Bars
644@section Scroll Bars
645@cindex Scroll Bar mode
646@cindex mode, Scroll Bar
647
648 When using X, Emacs normally makes a @dfn{scroll bar} at the left of
70c88b57
DL
649each Emacs window.@footnote{Placing it at the left is usually more
650useful with overlapping frames with text starting at the left margin.}
651The scroll bar runs the height of the window, and shows a moving
652rectangular inner box which represents the portion of the buffer
653currently displayed. The entire height of the scroll bar represents the
654entire length of the buffer.
6bf7aab6
DL
655
656 You can use @kbd{Mouse-2} (normally, the middle button) in the scroll
657bar to move or drag the inner box up and down. If you move it to the
658top of the scroll bar, you see the top of the buffer. If you move it to
659the bottom of the scroll bar, you see the bottom of the buffer.
660
661 The left and right buttons in the scroll bar scroll by controlled
662increments. @kbd{Mouse-1} (normally, the left button) moves the line at
663the level where you click up to the top of the window. @kbd{Mouse-3}
664(normally, the right button) moves the line at the top of the window
665down to the level where you click. By clicking repeatedly in the same
666place, you can scroll by the same distance over and over.
667
668 Aside from scrolling, you can also click @kbd{C-Mouse-2} in the scroll
669bar to split a window vertically. The split occurs on the line where
670you click.
671
672@findex scroll-bar-mode
70c88b57 673@vindex scroll-bar-mode
6bf7aab6
DL
674 You can enable or disable Scroll Bar mode with the command @kbd{M-x
675scroll-bar-mode}. With no argument, it toggles the use of scroll bars.
676With an argument, it turns use of scroll bars on if and only if the
677argument is positive. This command applies to all frames, including
70c88b57
DL
678frames yet to be created. Customize the option @code{scroll-bar-mode}
679to control the use of scroll bars at startup. You can use it to specify
680that they are placed at the right of windows if you prefer that. You
681can use the X resource @samp{verticalScrollBars} to control the initial
682setting of Scroll Bar mode similarly. @xref{Resources X}.
6bf7aab6
DL
683
684@findex toggle-scroll-bar
685 To enable or disable scroll bars for just the selected frame, use the
686@kbd{M-x toggle-scroll-bar} command.
687
70c88b57
DL
688@node Wheeled Mice
689@section Scrolling With `Wheeled' Mice
690
691@cindex mouse wheel
692@findex mwheel-install
693Some mice have a `wheel' instead of a third button. You can usually
694click the wheel to act as @kbd{mouse-3}. You can also use the wheel to
695scroll windows instead of using the scroll bar or keyboard commands.
696Use @kbd{M-x mwheel-install} to set up the wheel for scrolling or put
697@samp{(require 'mwheel)} in your @file{.emacs}. (Support for the wheel
239e21e2 698depends on the system generating appropriate events for Emacs.)
70c88b57
DL
699
700@vindex mwheel-follow-mouse
701@vindex mwheel-scroll-amount
702The variables @code{mwheel-follow-mouse} and @code{mwheel-scroll-amount}
703determine where and by how much buffers are scrolled.
704
6bf7aab6
DL
705@node Menu Bars
706@section Menu Bars
707@cindex Menu Bar mode
708@cindex mode, Menu Bar
709
710 You can turn display of menu bars on or off with @kbd{M-x
711menu-bar-mode}. With no argument, this command toggles Menu Bar mode, a
712minor mode. With an argument, the command turns Menu Bar mode on if the
713argument is positive, off if the argument is not positive. You can use
714the X resource @samp{menuBarLines} to control the initial setting of
715Menu Bar mode. @xref{Resources X}. Expert users often turn off the
716menu bar, especially on text-only terminals, where this makes one
717additional line available for text.
718
719 @xref{Menu Bar}, for information on how to invoke commands with the
720menu bar.
721
70c88b57
DL
722@c Presumably not useful until we make toolbar items.
723@c @node Tool Bars
724@c @section Tool Bars
725@c @cindex Tool Bar mode
726@c @cindex mode, Tool Bar
727
728@c You can turn display of tool bars on or off with @kbd{M-x
729@c tool-bar-mode}. With no argument, this command toggles Tool Bar mode, a
730@c minor mode. With an argument, the command turns Tool Bar mode on if the
731@c argument is positive, off if the argument is not positive.
732
733@node Dialog Boxes
734@section Using Dialog Boxes
735@cindex dialog boxes
736
737@vindex use-dialog-box
738Certain operations invoked from menus will use a window system dialog
739box to get information via the mouse if such dialog boxes are supported.
740This includes yes/no questions and file selection under Motif/LessTif
741and MS Windows. Customize the option @code{use-dialog-box} to suppress
742the use of dialog boxes.
743
6bf7aab6
DL
744@node Faces
745@section Using Multiple Typefaces
746@cindex faces
747
748 When using Emacs with X, you can set up multiple styles of displaying
749characters. The aspects of style that you can control are the type
750font, the foreground color, the background color, and whether to
751underline. Emacs on MS-DOS supports faces partially by letting you
752control the foreground and background colors of each face
70c88b57
DL
753(@pxref{MS-DOS}). On non-windowed terminals faces are supported to the
754extent the terminal can display them.
6bf7aab6
DL
755
756 The way you control display style is by defining named @dfn{faces}.
757Each face can specify a type font, a foreground color, a background
758color, and an underline flag; but it does not have to specify all of
759them. Then by specifying the face or faces to use for a given part
760of the text in the buffer, you control how that text appears.
761
762 The style of display used for a given character in the text is
763determined by combining several faces. Any aspect of the display style
764that isn't specified by overlays or text properties comes from the frame
765itself.
766
767 Enriched mode, the mode for editing formatted text, includes several
768commands and menus for specifying faces. @xref{Format Faces}, for how
769to specify the font for text in the buffer. @xref{Format Colors}, for
770how to specify the foreground and background color.
771
772 To alter the appearance of a face, use the customization buffer.
773@xref{Face Customization}. You can also use X resources to specify
774attributes of particular faces (@pxref{Resources X}).
775
776@findex list-faces-display
777 To see what faces are currently defined, and what they look like, type
778@kbd{M-x list-faces-display}. It's possible for a given face to look
779different in different frames; this command shows the appearance in the
780frame in which you type it. Here's a list of the standardly defined
781faces:
782
783@table @code
784@item default
785This face is used for ordinary text that doesn't specify any other face.
786@item modeline
70c88b57
DL
787This face is used for mode lines. By default, it's drawn with shadows
788for a `raised' effect under X and set up as the inverse of the default
789face on non-windowed terminals. @xref{Display Vars}.
790@item header-line
791Similar to @code{modeline} for a window's header line.
6bf7aab6
DL
792@item highlight
793This face is used for highlighting portions of text, in various modes.
794@item region
795This face is used for displaying a selected region (when Transient Mark
796mode is enabled---see below).
797@item secondary-selection
798This face is used for displaying a secondary selection (@pxref{Secondary
799Selection}).
800@item bold
801This face uses a bold variant of the default font, if it has one.
802@item italic
803This face uses an italic variant of the default font, if it has one.
804@item bold-italic
805This face uses a bold italic variant of the default font, if it has one.
806@item underline
807This face underlines text.
70c88b57
DL
808@item fixed-pitch
809The basic fixed-pitch face.
810@item fringe
811The face for the fringes to the left and right of windows under X.
812@item scroll-bar
813This face determines the colors of the scroll bar.
814@item border
815This face determines the color of the frame border.
816@item cursor
817This face determines the color of the cursor.
818@item mouse
819This face determines the color of the mouse pointer.
820@item tool-bar
821The basic tool-bar face.
822@item menu
823This face determines the colors and font of Emacs's menus. Setting the
824font of LessTif/Motif menus is currently not supported; attempts to set
825the font are ignored in this case.
826@item trailing-whitespace
827The face for highlighting trailing whitespace when
828@code{show-trailing-whitespace} is non-nil.
829@item variable-pitch
830The basic variable-pitch face.
6bf7aab6
DL
831@end table
832
833@cindex @code{region} face
834 When Transient Mark mode is enabled, the text of the region is
835highlighted when the mark is active. This uses the face named
836@code{region}; you can control the style of highlighting by changing the
837style of this face (@pxref{Face Customization}). @xref{Transient Mark},
838for more information about Transient Mark mode and activation and
839deactivation of the mark.
840
841 One easy way to use faces is to turn on Font Lock mode. This minor
842mode, which is always local to a particular buffer, arranges to
843choose faces according to the syntax of the text you are editing. It
844can recognize comments and strings in most languages; in several
845languages, it can also recognize and properly highlight various other
846important constructs. @xref{Font Lock}, for more information about
847Font Lock mode and syntactic highlighting.
848
849 You can print out the buffer with the highlighting that appears
850on your screen using the command @code{ps-print-buffer-with-faces}.
70c88b57 851@xref{PostScript}.
6bf7aab6
DL
852
853@node Font Lock
854@section Font Lock mode
855@cindex Font Lock mode
856@cindex mode, Font Lock
857@cindex syntax highlighting
70c88b57 858@cindex syntax coloring
6bf7aab6
DL
859
860 Font Lock mode is a minor mode, always local to a particular
861buffer, which highlights (or ``fontifies'') using various faces
862according to the syntax of the text you are editing. It can
863recognize comments and strings in most languages; in several
864languages, it can also recognize and properly highlight various other
865important constructs---for example, names of functions being defined
866or reserved keywords.
867
868@findex font-lock-mode
869@findex turn-on-font-lock
870 The command @kbd{M-x font-lock-mode} turns Font Lock mode on or off
871according to the argument, and toggles the mode when it has no argument.
872The function @code{turn-on-font-lock} unconditionally enables Font Lock
873mode. This is useful in mode-hook functions. For example, to enable
874Font Lock mode whenever you edit a C file, you can do this:
875
876@example
877(add-hook 'c-mode-hook 'turn-on-font-lock)
878@end example
879
880@findex global-font-lock-mode
70c88b57 881@vindex global-font-lock-mode
6bf7aab6 882 To turn on Font Lock mode automatically in all modes which support it,
70c88b57
DL
883customize the user option @code{global-font-lock-mode} or use the
884function @code{global-font-lock-mode}, like this:
6bf7aab6
DL
885
886@example
887(global-font-lock-mode 1)
888@end example
889
890@kindex M-g M-g
891@findex font-lock-fontify-block
892 In Font Lock mode, when you edit the text, the highlighting updates
893automatically in the line that you changed. Most changes don't affect
894the highlighting of subsequent lines, but occasionally they do. To
895rehighlight a range of lines, use the command @kbd{M-g M-g}
896(@code{font-lock-fontify-block}).
897
898@vindex font-lock-mark-block-function
899 In certain major modes, @kbd{M-g M-g} refontifies the entire current
900function. (The variable @code{font-lock-mark-block-function} controls
901how to find the current function.) In other major modes, @kbd{M-g M-g}
902refontifies 16 lines above and below point.
903
904 With a prefix argument @var{n}, @kbd{M-g M-g} refontifies @var{n}
905lines above and below point, regardless of the mode.
906
907 To get the full benefit of Font Lock mode, you need to choose a
908default font which has bold, italic, and bold-italic variants; or else
909you need to have a color or gray-scale screen.
910
911@vindex font-lock-maximum-decoration
912 The variable @code{font-lock-maximum-decoration} specifies the
913preferred level of fontification, for modes that provide multiple
914levels. Level 1 is the least amount of fontification; some modes
915support levels as high as 3. The normal default is ``as high as
916possible.'' You can specify an integer, which applies to all modes, or
917you can specify different numbers for particular major modes; for
918example, to use level 1 for C/C++ modes, and the default level
919otherwise, use this:
920
921@example
922(setq font-lock-maximum-decoration
923 '((c-mode . 1) (c++-mode . 1)))
924@end example
925
926@vindex font-lock-maximum-size
927 Fontification can be too slow for large buffers, so you can suppress
928it. The variable @code{font-lock-maximum-size} specifies a buffer size,
929beyond which buffer fontification is suppressed.
930
931@c @w is used below to prevent a bad page-break.
932@vindex font-lock-beginning-of-syntax-function
933 Comment and string fontification (or ``syntactic'' fontification)
934relies on analysis of the syntactic structure of the buffer text. For
935the purposes of speed, some modes including C mode and Lisp mode rely on
936a special convention: an open-parenthesis in the leftmost column always
937defines the @w{beginning} of a defun, and is thus always outside any string
938or comment. (@xref{Defuns}.) If you don't follow this convention,
939then Font Lock mode can misfontify the text after an open-parenthesis in
940the leftmost column that is inside a string or comment.
941
942 The variable @code{font-lock-beginning-of-syntax-function} (always
943buffer-local) specifies how Font Lock mode can find a position
944guaranteed to be outside any comment or string. In modes which use the
945leftmost column parenthesis convention, the default value of the variable
946is @code{beginning-of-defun}---that tells Font Lock mode to use the
947convention. If you set this variable to @code{nil}, Font Lock no longer
948relies on the convention. This avoids incorrect results, but the price
949is that, in some cases, fontification for a changed text must rescan
950buffer text from the beginning of the buffer.
951
952@findex font-lock-add-keywords
953 Font Lock highlighting patterns already exist for many modes, but you
954may want to fontify additional patterns. You can use the function
955@code{font-lock-add-keywords}, to add your own highlighting patterns for
956a particular mode. For example, to highlight @samp{FIXME:} words in C
957comments, use this:
958
959@example
960(font-lock-add-keywords
961 'c-mode
962 '(("\\<\\(FIXME\\):" 1 font-lock-warning-face t)))
963@end example
964
965@node Support Modes
966@section Font Lock Support Modes
967
968 Font Lock support modes make Font Lock mode faster for large buffers.
969There are two support modes: Fast Lock mode and Lazy Lock mode. They
970use two different methods of speeding up Font Lock mode.
971
972@menu
973* Fast Lock Mode:: Saving font information in files.
974* Lazy Lock Mode:: Fontifying only text that is actually displayed.
70c88b57 975* JIT Lock Mode:: Like Lazy Lock, but generally faster.
6bf7aab6
DL
976* Fast or Lazy:: Which support mode is best for you?
977@end menu
978
979@node Fast Lock Mode
980@subsection Fast Lock Mode
981
982@cindex Fast Lock mode
983@cindex mode, Fast Lock
984 To make Font Lock mode faster for buffers visiting large files, you
985can use Fast Lock mode. Fast Lock mode saves the font information for
986each file in a separate cache file; each time you visit the file, it
987rereads the font information from the cache file instead of refontifying
988the text from scratch.
989
990@findex fast-lock-mode
991 The command @kbd{M-x fast-lock-mode} turns Fast Lock mode on or off,
992according to the argument (with no argument, it toggles). You can also
993arrange to enable Fast Lock mode whenever you use Font Lock mode, like
994this:
995
996@example
997(setq font-lock-support-mode 'fast-lock-mode)
998@end example
999
1000@vindex fast-lock-minimum-size
1001 It is not worth writing a cache file for small buffers. Therefore,
1002the variable @code{fast-lock-minimum-size} specifies a minimum file size
1003for caching font information.
1004
1005@vindex fast-lock-cache-directories
1006 The variable @code{fast-lock-cache-directories} specifies where to put
1007the cache files. Its value is a list of directories to try; @code{"."}
1008means the same directory as the file being edited. The default value is
1009@w{@code{("." "~/.emacs-flc")}}, which means to use the same directory if
1010possible, and otherwise the directory @file{~/.emacs-flc}.
1011
1012@vindex fast-lock-save-others
1013 The variable @code{fast-lock-save-others} specifies whether Fast Lock
1014mode should save cache files for files that you do not own. A
1015non-@code{nil} value means yes (and that is the default).
1016
1017@node Lazy Lock Mode
1018@subsection Lazy Lock Mode
1019@cindex Lazy Lock mode
1020@cindex mode, Lazy Lock
1021
1022 To make Font Lock mode faster for large buffers, you can use Lazy Lock
1023mode to reduce the amount of text that is fontified. In Lazy Lock mode,
1024buffer fontification is demand-driven; it happens to portions of the
1025buffer that are about to be displayed. And fontification of your
1026changes is deferred; it happens only when Emacs has been idle for a
1027certain short period of time.
1028
1029@findex lazy-lock-mode
1030 The command @kbd{M-x lazy-lock-mode} turns Lazy Lock mode on or off,
1031according to the argument (with no argument, it toggles). You can also
1032arrange to enable Lazy Lock mode whenever you use Font Lock mode, like
1033this:
1034
1035@example
1036(setq font-lock-support-mode 'lazy-lock-mode)
1037@end example
1038
1039@vindex lazy-lock-minimum-size
1040 It is not worth avoiding buffer fontification for small buffers.
1041Therefore, the variable @code{lazy-lock-minimum-size} specifies a
1042minimum buffer size for demand-driven buffer fontification. Buffers
1043smaller than that are fontified all at once, as in plain Font Lock mode.
1044
1045@vindex lazy-lock-defer-time
1046 When you alter the buffer, Lazy Lock mode defers fontification of the
1047text you changed. The variable @code{lazy-lock-defer-time} specifies
1048how many seconds Emacs must be idle before it starts fontifying your
1049changes. If the value is 0, then changes are fontified immediately, as
1050in plain Font Lock mode.
1051
1052@vindex lazy-lock-defer-on-scrolling
1053 Lazy Lock mode normally fontifies newly visible portions of the buffer
1054before they are first displayed. However, if the value of
1055@code{lazy-lock-defer-on-scrolling} is non-@code{nil}, newly visible
1056text is fontified only when Emacs is idle for
1057@code{lazy-lock-defer-time} seconds.
1058
1059@vindex lazy-lock-defer-contextually
1060 In some modes, including C mode and Emacs Lisp mode, changes in one
1061line's contents can alter the context for subsequent lines, and thus
1062change how they ought to be fontified. Ordinarily, you must type
1063@kbd{M-g M-g} to refontify the subsequent lines. However, if you set
1064the variable @code{lazy-lock-defer-contextually} to non-@code{nil}, Lazy
1065Lock mode does this automatically, after @code{lazy-lock-defer-time}
1066seconds.
1067
1068@cindex stealth fontification
1069 When Emacs is idle for a long time, Lazy Lock fontifies additional
1070portions of the buffer, not yet displayed, in case you will display them
1071later. This is called @dfn{stealth fontification}.
1072
1073@vindex lazy-lock-stealth-time
1074@vindex lazy-lock-stealth-lines
1075@vindex lazy-lock-stealth-verbose
1076 The variable @code{lazy-lock-stealth-time} specifies how many seconds
1077Emacs has to be idle before stealth fontification starts. A value of
1078@code{nil} means no stealth fontification. The variables
1079@code{lazy-lock-stealth-lines} and @code{lazy-lock-stealth-verbose}
1080specify the granularity and verbosity of stealth fontification.
1081
70c88b57
DL
1082@node JIT Lock Mode
1083@subsection JIT Lock Mode
1084
1085@findex jit-lock-mode
4d5d60c3
SM
1086This Just-In-time support mode is roughly equivalent to Lazy Lock but is
1087generally faster and more robust. It supports stealth and deferred
1088contextual fontification.
70c88b57
DL
1089
1090Font-lock uses @code{jit-lock-mode} as default support mode, so you
1091don't have to do anything to activate it.
1092
6bf7aab6
DL
1093@node Fast or Lazy
1094@subsection Fast Lock or Lazy Lock?
1095
1096 Here is a simple guide to help you choose one of the Font Lock support
1097modes.
1098
1099@itemize @bullet
1100@item
1101Fast Lock mode intervenes only during file visiting and buffer
1102killing (and related events); therefore buffer editing and window
1103scrolling are no faster or slower than in plain Font Lock mode.
1104
1105@item
1106Fast Lock mode is slower at reading a cache file than Lazy Lock
1107mode is at fontifying a window; therefore Fast Lock mode is slower at
1108visiting a file than Lazy Lock mode.
1109
1110@item
1111Lazy Lock mode intervenes during window scrolling to fontify text that
1112scrolls onto the screen; therefore, scrolling is slower than in plain
1113Font Lock mode.
1114
1115@item
1116Lazy Lock mode doesn't fontify during buffer editing (it defers
1117fontification of changes); therefore, editing is faster than in plain
1118Font Lock mode.
1119
1120@item
1121Fast Lock mode can be fooled by a file that is kept under version
1122control software; therefore buffer fontification may occur even when
1123a cache file exists for the file.
1124
1125@item
1126Fast Lock mode only works with a buffer visiting a file; Lazy Lock
1127mode works with any buffer.
1128
1129@item
1130Fast Lock mode generates cache files; Lazy Lock mode does not.
1131@end itemize
1132
1133@vindex font-lock-support-mode
1134 The variable @code{font-lock-support-mode} specifies which of these
1135support modes to use; for example, to specify that Fast Lock mode is
1136used for C/C++ modes, and Lazy Lock mode otherwise, set the variable
1137like this:
1138
1139@example
1140(setq font-lock-support-mode
1141 '((c-mode . fast-lock-mode) (c++-mode . fast-lock-mode)
1142 (t . lazy-lock-mode)))
1143@end example
1144
1145@node Highlight Changes
1146@section Highlight Changes Mode
1147
1148@findex highlight-changes-mode
1149 Use @kbd{M-x highlight-changes-mode} to enable a minor mode
1150that uses faces (colors, typically) to indicate which parts of
1151the buffer were changed most recently.
1152
c5feaf54
EZ
1153@node Highlight Interactively
1154@section Interactive Highlighting of Arbitrary Text
1155
1156@cindex highlighting, arbitrary text
1157@cindex interactive highlighting
1158 Sometimes, you could need to highlight arbitrary strings in the
1159buffer. For example, you might wish to see all the references to a
1160certain variable in a program source file or highlight certain parts in
1161a voluminous output of some program, or make certain cliches stand out.
1162
1163@findex hi-lock-mode
1164 Use the @kbd{M-x hi-lock-mode} command to turn on a minor mode that
1165allows you to specify regular expressions of the text to be highlighted.
1166@code{hi-lock-mode} works like Font Lock (@pxref{Font Lock}), except
1167that it lets you control what parts of text are highlighted.
1168@code{hi-lock-mode} provides several functions:
1169
1170@table @kbd
1171@item C-x w h
1172@kindex C-x w i
1173@findex highlight-regexp
1174Specify the regular expression (@pxref{Regexps}) for the parts of buffer
1175text that are to be highlighted (@code{highlight-regexp}). It prompts
1176for the regular expression, then for the name of the face with which to
1177highlight the text that matches.
1178
1179@item C-x w r
1180@kindex C-x w r
1181@findex unhighlight-regexp
1182Unhighlight @var{regexp} (@code{unhighlight-regexp}). Prompts for the
1183regular expression, and will accept only one of the regexps inserted by
1184other @code{hi-lock} commands.
1185
1186@item C-x w l
1187@kindex C-x w l
1188@findex highlight-lines-matching-regexp
1189@cindex lines, highlighting
1190@cindex highlighting lines of text
1191Specify the regular expression (@pxref{Regexps}) for the lines of buffer
1192text that are to be highlighted
1193(@code{highlight-lines-matching-regexp}). It prompts for the regular
1194expression, then for the name of the face with which to highlight the
1195matching lines.
1196
1197@item C-x w b
1198@kindex C-x w b
1199@findex hi-lock-write-interactive-patterns
1200This runs the @code{hi-lock-write-interactive-patterns} command which
1201inserts the patterns added by @kbd{M-x highlight-regexp} and @kbd{M-x
1202highlight-lines-matching-regexp} into the current buffer at point, as
1203comments. These patterns will be read the next time the file is
1204visited, or when the @kbd{M-x hi-lock-find-patterns} command is issued.
1205
1206@item C-x w i
1207@kindex C-x w i
1208@findex hi-lock-find-patterns
1209@vindex hi-lock-exclude-modes
1210Re-read patterns stored in a buffer in the format produced by @kbd{M-x
1211hi-lock-write-interactive-patterns}
1212(@code{hi-lock-write-interactive-patterns}. If you invoke this command
1213in a buffer whose major mode is a member of the list that is the value
1214of the variable @code{hi-lock-exclude-modes}, this command has no
1215effect.
1216@end table
1217
1218
70c88b57
DL
1219@node Trailing Whitespace
1220@section Trailing Whitespace
1221
1222@cindex trailing whitespace
43391ff3 1223@cindex whitespace, trailing
70c88b57
DL
1224@vindex show-trailing-whitespace
1225The option @code{show-trailing-whitespace} can be customized so that
1226Emacs displays trailing whitespace in the face
1227@code{trailing-whitespace}. Trailing whitespace is defined as spaces or
1228tabs at the end of a line. To avoid busy highlighting when entering new
1229text, trailing whitespace is not displayed if point is at the end of the
1230line containing the whitespace.
1231
1232@node Tooltips
43391ff3 1233@section Tooltips (or `Balloon Help')
70c88b57
DL
1234
1235@cindex balloon help
1236@findex tooltip-mode
1237Tooltips are small X windows displaying a help string at the current
d9701e91
DL
1238mouse position, typically over text---including the mode line---which
1239can be activated with the mouse or other keys. (This facility is
1240sometimes known as `balloon help'.) Tooltips may be available for menu
1241items too.
1242
1243To use tooltips, customize the user option @code{tooltip-mode}. The
1244customization group @code{tooltip} controls various aspects of their
1245display. If Tooltip mode is not activated, the help text is displayed
1246in the echo area instead.
70c88b57 1247
43391ff3
DL
1248@node Mouse Avoidance
1249@section Mouse Avoidance
1250
1251Mouse Avoidance mode keeps the window system mouse pointer away from
1252point to avoid obscuring text. Whenever the mouse is moved, the frame
1253is also raised. To use it, customize the option
1254@code{mouse-avoidance-mode}. You can set this to various values to move
1255the mouse in several ways:
1256
1257@table @code
1258@item banish
1259Move the mouse to the upper-right corner on any keypress;
1260@item exile
1261Move the mouse to the corner only if the cursor gets too close,
1262and allow it to return once the cursor is out of the way;
1263@item jump
1264If the cursor gets too close to the mouse, displace the mouse
1265a random distance & direction;
1266@item animate
1267As @code{jump}, but shows steps along the way for illusion of motion;
1268@item cat-and-mouse
1269The same as @code{animate};
1270@item proteus
1271As @code{animate}, but changes the shape of the mouse pointer too.
1272@end table
1273
1274You can also use the command @kbd{M-x mouse-avoidance-mode} to turn on
1275the mode.
70c88b57 1276
6bf7aab6
DL
1277@node Misc X
1278@section Miscellaneous X Window Features
1279
1280 The following commands let you create, delete and operate on frames:
1281
1282@table @kbd
1283@item C-z
1284@kindex C-z @r{(X windows)}
1285@findex iconify-or-deiconify-frame
1286Iconify the selected Emacs frame (@code{iconify-or-deiconify-frame}).
1287The normal meaning of @kbd{C-z}, to suspend Emacs, is not useful under a
1288window system, so it has a different binding in that case.
1289
1290If you type this command on an Emacs frame's icon, it deiconifies the frame.
1291
1292@item C-x 5 0
1293@kindex C-x 5 0
1294@findex delete-frame
1295Delete the selected frame (@code{delete-frame}). This is not allowed if
1296there is only one frame.
1297
1298@item C-x 5 o
1299@kindex C-x 5 o
1300@findex other-frame
1301Select another frame, raise it, and warp the mouse to it so that it
1302stays selected. If you repeat this command, it cycles through all the
1303frames on your terminal.
d9701e91
DL
1304
1305@item C-x 5 1
1306@kindex C-x 5 1
1307@findex delete-other-frames
1308Delete all frames except the selected one.
6bf7aab6
DL
1309@end table
1310
cf684655
EZ
1311@cindex busy-cursor display
1312@vindex busy-cursor-delay
1313 Emacs can optionally display a busy cursor on X and other window
1314systems. To turn this on or off, customize the group @code{cursor}.
1315You can also control the amount of time Emacs is busy before the
1316busy-cursor is displayed, by customizing the value of the variable
1317@code{busy-cursor-delay}.
1318
d954b29b
EZ
1319@vindex x-stretch-cursor
1320@cindex wide block cursor
1321 Emacs on X can draw the block cursor as wide as the glyph under the
1322cursor. For example, if the cursor is on a TAB character, it is drawn
1323as wide as that TAB is on the display. To turn on this feature, set the
1324variable @code{x-stretch-cursor} to a non-nil value.
1325
c03ab8fd
EZ
1326@vindex indicate-empty-lines
1327@vindex default-indicate-empty-lines
1328@cindex empty lines
1329 Empty display lines at the end of the buffer can be optionally marked
8eb13d66 1330with a special bitmap at the left fringe of the window. This is
c03ab8fd
EZ
1331activated by setting the buffer-local variable
1332@code{indicate-empty-lines} to a non-nil value. The default value of
1333this variable is found in @code{default-indicate-empty-lines}.
1334
6bf7aab6
DL
1335@node Non-Window Terminals
1336@section Non-Window Terminals
1337@cindex non-window terminals
1338@cindex single-frame terminals
1339
1340 If your terminal does not have a window system that Emacs supports,
1341then it can display only one Emacs frame at a time. However, you can
1342still create multiple Emacs frames, and switch between them. Switching
1343frames on these terminals is much like switching between different
1344window configurations.
1345
1346 Use @kbd{C-x 5 2} to create a new frame and switch to it; use @kbd{C-x
13475 o} to cycle through the existing frames; use @kbd{C-x 5 0} to delete
1348the current frame.
1349
1350 Each frame has a number to distinguish it. If your terminal can
1351display only one frame at a time, the selected frame's number @var{n}
1352appears near the beginning of the mode line, in the form
1353@samp{F@var{n}}.
1354
1355@findex set-frame-name
1356@findex select-frame-by-name
1357 @samp{F@var{n}} is actually the frame's name. You can also specify a
1358different name if you wish, and you can select a frame by its name. Use
1359the command @kbd{M-x set-frame-name @key{RET} @var{name} @key{RET}} to
1360specify a new name for the selected frame, and use @kbd{M-x
1361select-frame-by-name @key{RET} @var{name} @key{RET}} to select a frame
1362according to its name. The name you specify appears in the mode line
1363when the frame is selected.
1364
70c88b57
DL
1365@node XTerm Mouse
1366@section Using a Mouse in Terminal Emulators
43391ff3
DL
1367@cindex xterm, mouse support
1368@cindex terminal emulators, mouse support
70c88b57
DL
1369
1370Some terminal emulators under X support mouse clicks in the terminal
1371window. In a terminal emulator which is compatible with @code{xterm},
1372you can use @kbd{M-x xterm-mouse-mode} to enable simple use of the
1373mouse---only single clicks are supported. The normal @code{xterm} mouse
1374functionality is still available by holding down the @kbd{SHIFT} key
1375when you press the mouse button.