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