@c This is part of the Emacs manual.@c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997, 2000, 2001, 2002@c Free Software Foundation, Inc.@c See file emacs.texi for copying conditions.@node Display, Search, Registers, Top@chapter Controlling the Display Since only part of a large buffer fits in the window, Emacs tries toshow a part that is likely to be interesting. Display-control commandsallow you to specify which part of the text you want to see, and how todisplay it.@menu* Faces:: How to change the display style using faces.* Font Lock:: Minor mode for syntactic highlighting using faces.* Highlight Changes:: Using colors to show where you changed the buffer.* Highlight Interactively:: Tell Emacs what text to highlight.* Scrolling:: Moving text up and down in a window.* Horizontal Scrolling:: Moving text left and right in a window.* Fringes:: Enabling or disabling window fringes.* Useless Whitespace:: Showing possibly-spurious trailing whitespace.* Follow Mode:: Follow mode lets two windows scroll as one.* Selective Display:: Hiding lines with lots of indentation.* Optional Mode Line:: Optional mode line display features.* Text Display:: How text characters are normally displayed.* Display Custom:: Information on variables for customizing display.* Cursor Display:: Features for displaying the cursor.@end menu@node Faces@section Using Multiple Typefaces@cindex faces Emacs supports using multiple styles of displaying characters. Eachstyle is called a @dfn{face}. Each face can specify various @dfn{faceattributes}, such as the font family, the height, weight and slant ofthe characters, the foreground and background color, and underliningor overlining. A face does not have to specify all of theseattributes; often it inherits many of them from another face. On a window system, all the Emacs face attributes are meaningful.On a character terminal, only some of them work. Some characterterminals support inverse video, bold, and underline attributes; somesupport colors. Character terminals generally do not support changingthe height and width or the font family. Features which rely on text in multiple faces (such as Font Lock mode)will also work on non-windowed terminals that can display more than oneface, whether by colors or underlining and emboldening. This includesthe console on GNU/Linux, an @code{xterm} which supports colors, theMS-DOS display (@pxref{MS-DOS}), and the MS-Windows version invoked withthe @option{-nw} option. Emacs determines automatically whether theterminal has this capability. You control the appearance of a part of the text in the buffer byspecifying the face or faces to use for it. The style of display usedfor any given character is determined by combining the attributes ofall the applicable faces specified for that character. Any attributethat isn't specified by these faces is taken from the @code{default} face,whose attributes reflect the default settings of the frame itself. Enriched mode, the mode for editing formatted text, includes severalcommands and menus for specifying faces for text in the buffer.@xref{Format Faces}, for how to specify the font for text in thebuffer. @xref{Format Colors}, for how to specify the foreground andbackground color.@cindex face colors, setting@findex set-face-foreground@findex set-face-background To alter the appearance of a face, use the customization buffer.@xref{Face Customization}. You can also use X resources to specifyattributes of particular faces (@pxref{Resources}). Alternatively,you can change the foreground and background colors of a specific facewith @kbd{M-x set-face-foreground} and @kbd{M-x set-face-background}.These commands prompt in the minibuffer for a face name and a colorname, with completion, and then set that face to use the specifiedcolor. Changing the colors of the @code{default} face also changesthe foreground and background colors on all frames, both existing andthose to be created in the future. (You can also set foreground andbackground colors for the current frame only; see @ref{FrameParameters}.) Emacs 21 can correctly display variable-width fonts, but Emacscommands that calculate width and indentation do not know how tocalculate variable widths. This can sometimes lead to incorrectresults when you use variable-width fonts. In particular, indentationcommands can give inconsistent results, so we recommend you avoidvariable-width fonts for editing program source code. Filling willsometimes make lines too long or too short. We plan to address theseissues in future Emacs versions.@findex list-faces-display To see what faces are currently defined, and what they look like, type@kbd{M-x list-faces-display}. It's possible for a given face to lookdifferent in different frames; this command shows the appearance in theframe in which you type it. Here's a list of the standard definedfaces:@table @code@item defaultThis face is used for ordinary text that doesn't specify any other face.@item mode-lineThis face is used for the mode line of the currently selected window.By default, it's drawn with shadows for a ``raised'' effect on windowsystems, and drawn as the inverse of the default face on non-windowedterminals. @xref{Display Custom}.@item mode-line-inactiveLike @code{mode-line}, but used for mode lines of the windows otherthan the selected one (if @code{mode-line-in-non-selected-windows} isnon-@code{nil}). This face inherits from @code{mode-line}, so changesin that face affect mode lines in all windows.@item header-lineSimilar to @code{mode-line} for a window's header line. Most modesdon't use the header line, but the Info mode does.@item minibuffer-promptThis face is used for the prompt strings displayed in the minibuffer.@item highlightThis face is used for highlighting portions of text, in various modes.For example, mouse-sensitive text is highlighted using this face.@item isearchThis face is used for highlighting Isearch matches.@item lazy-highlightThis face is used for lazy highlighting of Isearch and Query Replacematches other than the current one.@item regionThis face is used for displaying a selected region (when Transient Markmode is enabled---see below).@item secondary-selectionThis face is used for displaying a secondary X selection (@pxref{SecondarySelection}).@item boldThis face uses a bold variant of the default font, if it has one.@item italicThis face uses an italic variant of the default font, if it has one.@item bold-italicThis face uses a bold italic variant of the default font, if it has one.@item underlineThis face underlines text.@item fixed-pitchThe basic fixed-pitch face.@item fringe@cindex fringeThe face for the fringes to the left and right of windows on graphicdisplays. (The fringes are the narrow portions of the Emacs framebetween the text area and the window's right and left borders.)@item scroll-barThis face determines the visual appearance of the scroll bar.@item borderThis face determines the color of the frame border.@item cursorThis face determines the color of the cursor.@item mouseThis face determines the color of the mouse pointer.@item tool-barThis is the basic tool-bar face. No text appears in the tool bar, but thecolors of this face affect the appearance of tool bar icons.@item tooltipThis face is used for tooltips.@item menuThis face determines the colors and font of Emacs's menus. Setting thefont of LessTif/Motif menus is currently not supported; attempts to setthe font are ignored in this case.@item trailing-whitespaceThe face for highlighting trailing whitespace when@code{show-trailing-whitespace} is non-@code{nil}; see @ref{UselessWhitespace}.@item variable-pitchThe basic variable-pitch face.@end table@cindex @code{region} face When Transient Mark mode is enabled, the text of the region ishighlighted when the mark is active. This uses the face named@code{region}; you can control the style of highlighting by changing thestyle of this face (@pxref{Face Customization}). @xref{Transient Mark},for more information about Transient Mark mode and activation anddeactivation of the mark. One easy way to use faces is to turn on Font Lock mode. This minormode, which is always local to a particular buffer, arranges tochoose faces according to the syntax of the text you are editing. Itcan recognize comments and strings in most languages; in severallanguages, it can also recognize and properly highlight various otherimportant constructs. @xref{Font Lock}, for more information aboutFont Lock mode and syntactic highlighting. You can print out the buffer with the highlighting that appearson your screen using the command @code{ps-print-buffer-with-faces}.@xref{PostScript}.@node Font Lock@section Font Lock mode@cindex Font Lock mode@cindex mode, Font Lock@cindex syntax highlighting and coloring Font Lock mode is a minor mode, always local to a particular buffer,which highlights (or ``fontifies'') using various faces according tothe syntax of the text you are editing. It can recognize comments andstrings in most languages; in several languages, it can also recognizeand properly highlight various other important constructs---forexample, names of functions being defined or reserved keywords.Some special modes, such as Occur mode and Info mode, have completelyspecialized ways of assigning fonts for Font Lock mode.@findex font-lock-mode@findex turn-on-font-lock The command @kbd{M-x font-lock-mode} turns Font Lock mode on or offaccording to the argument, and toggles the mode when it has no argument.The function @code{turn-on-font-lock} unconditionally enables Font Lockmode. This is useful in mode-hook functions. For example, to enableFont Lock mode whenever you edit a C file, you can do this:@example(add-hook 'c-mode-hook 'turn-on-font-lock)@end example@findex global-font-lock-mode@vindex global-font-lock-mode To turn on Font Lock mode automatically in all modes which supportit, customize the user option @code{global-font-lock-mode} or use thefunction @code{global-font-lock-mode} in your @file{.emacs} file, likethis:@example(global-font-lock-mode 1)@end example Font Lock mode uses several specifically named faces to do its job,including @code{font-lock-string-face}, @code{font-lock-comment-face},and others. The easiest way to find them all is to use completionon the face name in @code{set-face-foreground}. To change the colors or the fonts used by Font Lock mode to fontifydifferent parts of text, just change these faces. There aretwo ways to do it:@itemize @bullet@itemInvoke @kbd{M-x set-face-foreground} or @kbd{M-x set-face-background}to change the colors of a particular face used by Font Lock.@xref{Faces}. The command @kbd{M-x list-faces-display} displays allthe faces currently known to Emacs, including those used by Font Lock.@itemCustomize the faces interactively with @kbd{M-x customize-face}, asdescribed in @ref{Face Customization}.@end itemize To get the full benefit of Font Lock mode, you need to choose adefault font which has bold, italic, and bold-italic variants; or elseyou need to have a color or gray-scale screen.@vindex font-lock-maximum-decoration The variable @code{font-lock-maximum-decoration} specifies thepreferred level of fontification, for modes that provide multiplelevels. Level 1 is the least amount of fontification; some modessupport levels as high as 3. The normal default is ``as high aspossible.'' You can specify an integer, which applies to all modes, oryou can specify different numbers for particular major modes; forexample, to use level 1 for C/C++ modes, and the default levelotherwise, use this:@example(setq font-lock-maximum-decoration '((c-mode . 1) (c++-mode . 1)))@end example@vindex font-lock-maximum-size Fontification can be too slow for large buffers, so you can suppressit. The variable @code{font-lock-maximum-size} specifies a buffer size,beyond which buffer fontification is suppressed.@c @w is used below to prevent a bad page-break.@vindex font-lock-beginning-of-syntax-function@cindex incorrect fontification@cindex parenthesis in column zero and fontification@cindex brace in column zero and fontification Comment and string fontification (or ``syntactic'' fontification)relies on analysis of the syntactic structure of the buffer text. Forthe sake of speed, some modes, including C mode and Lisp mode,rely on a special convention: an open-parenthesis or open-brace in theleftmost column always defines the @w{beginning} of a defun, and isthus always outside any string or comment. (@xref{Left MarginParen}.) If you don't follow this convention, Font Lock mode canmisfontify the text that follows an open-parenthesis or open-brace inthe leftmost column that is inside a string or comment.@cindex slow display during scrolling The variable @code{font-lock-beginning-of-syntax-function} (alwaysbuffer-local) specifies how Font Lock mode can find a positionguaranteed to be outside any comment or string. In modes which use theleftmost column parenthesis convention, the default value of the variableis @code{beginning-of-defun}---that tells Font Lock mode to use theconvention. If you set this variable to @code{nil}, Font Lock no longerrelies on the convention. This avoids incorrect results, but the priceis that, in some cases, fontification for a changed text must rescanbuffer text from the beginning of the buffer. This can considerablyslow down redisplay while scrolling, particularly if you are close tothe end of a large buffer.@findex font-lock-add-keywords Font Lock highlighting patterns already exist for many modes, but youmay want to fontify additional patterns. You can use the function@code{font-lock-add-keywords}, to add your own highlighting patterns fora particular mode. For example, to highlight @samp{FIXME:} words in Ccomments, use this:@example(font-lock-add-keywords 'c-mode '(("\\<\\(FIXME\\):" 1 font-lock-warning-face t)))@end example@findex font-lock-remove-keywords To remove keywords from the font-lock highlighting patterns, use thefunction @code{font-lock-remove-keywords}. @xref{Search-basedFontification,,, elisp, The Emacs Lisp Reference Manual}, fordocumentation of the format of this list.@cindex just-in-time (JIT) font-lock@cindex background syntax highlighting Fontifying large buffers can take a long time. To avoid largedelays when a file is visited, Emacs fontifies only the visibleportion of a buffer. As you scroll through the buffer, each portionthat becomes visible is fontified as soon as it is displayed. Theparts of the buffer that are not displayed are fontified``stealthily'', in the background, i.e.@: when Emacs is idle. You cancontrol this background fontification, called @dfn{Just-In-Time}, or@dfn{JIT} Font Lock, by customizing various options in thecustomization group @samp{jit-lock}. @xref{Specific Customization}.@node Highlight Changes@section Highlight Changes Mode@findex highlight-changes-mode Use @kbd{M-x highlight-changes-mode} to enable a minor modethat uses faces (colors, typically) to indicate which parts ofthe buffer were changed most recently.@node Highlight Interactively@section Interactive Highlighting by Matching@cindex highlighting by matching@cindex interactive highlighting It is sometimes useful to highlight the strings that match a certainregular expression. For example, you might wish to see all thereferences to a certain variable in a program source file, or highlightcertain parts in a voluminous output of some program, or make certaincliches stand out in an article.@findex hi-lock-mode Use the @kbd{M-x hi-lock-mode} command to turn on a minor mode thatallows you to specify regular expressions of the text to behighlighted. Hi-lock mode works like Font Lock (@pxref{Font Lock}),except that it lets you specify explicitly what parts of text tohighlight. You control Hi-lock mode with these commands:@table @kbd@item C-x w h @var{regexp} @key{RET} @var{face} @key{RET}@kindex C-x w h@findex highlight-regexpHighlight text that matches@var{regexp} using face @var{face} (@code{highlight-regexp}).By using this command more than once, you can highlight variousparts of the text in different ways.@item C-x w r @var{regexp} @key{RET}@kindex C-x w r@findex unhighlight-regexpUnhighlight @var{regexp} (@code{unhighlight-regexp}). You must enterone of the regular expressions currently specified for highlighting.(You can use completion, or choose from a menu, to enter one of themconveniently.)@item C-x w l @var{regexp} @key{RET} @var{face} @key{RET}@kindex C-x w l@findex highlight-lines-matching-regexp@cindex lines, highlighting@cindex highlighting lines of textHighlight entire lines containing a match for @var{regexp}, using face@var{face} (@code{highlight-lines-matching-regexp}).@item C-x w b@kindex C-x w b@findex hi-lock-write-interactive-patternsInsert all the current highlighting regexp/face pairs into the bufferat point, with comment delimiters to prevent them from changing yourprogram. This key binding runs the@code{hi-lock-write-interactive-patterns} command.These patterns will be read the next time you visit the file whileHi-lock mode is enabled, or whenever you use the @kbd{M-xhi-lock-find-patterns} command.@item C-x w i@kindex C-x w i@findex hi-lock-find-patterns@vindex hi-lock-exclude-modesRe-read regexp/face pairs in the current buffer(@code{hi-lock-write-interactive-patterns}). The list of pairs isfound no matter where in the buffer it may be.This command does nothing if the major mode is a member of the list@code{hi-lock-exclude-modes}.@end table@node Scrolling@section Scrolling If a buffer contains text that is too large to fit entirely within awindow that is displaying the buffer, Emacs shows a contiguous portion ofthe text. The portion shown always contains point.@cindex scrolling @dfn{Scrolling} means moving text up or down in the window so thatdifferent parts of the text are visible. Scrolling forward means that textmoves up, and new text appears at the bottom. Scrolling backward movestext down and new text appears at the top. Scrolling happens automatically if you move point past the bottom or topof the window. You can also explicitly request scrolling with the commandsin this section.@table @kbd@item C-lClear screen and redisplay, scrolling the selected window to centerpoint vertically within it (@code{recenter}).@item C-vScroll forward (a windowful or a specified number of lines) (@code{scroll-up}).@item @key{NEXT}@itemx @key{PAGEDOWN}Likewise, scroll forward.@item M-vScroll backward (@code{scroll-down}).@item @key{PRIOR}@itemx @key{PAGEUP}Likewise, scroll backward.@item @var{arg} C-lScroll so point is on line @var{arg} (@code{recenter}).@item C-M-lScroll heuristically to bring useful information onto the screen(@code{reposition-window}).@end table@kindex C-l@findex recenter The most basic scrolling command is @kbd{C-l} (@code{recenter}) withno argument. It clears the entire screen and redisplays all windows.In addition, it scrolls the selected window so that point is halfwaydown from the top of the window.@kindex C-v@kindex M-v@kindex NEXT@kindex PRIOR@kindex PAGEDOWN@kindex PAGEUP@findex scroll-up@findex scroll-down@vindex next-screen-context-lines To read the buffer a windowful at a time, use @kbd{C-v}(@code{scroll-up}) with no argument. This scrolls forward by nearlythe whole window height. The effect is to take the two lines at thebottom of the window and put them at the top, followed by nearly awhole windowful of lines that were not previously visible. If pointwas in the text that scrolled off the top, it ends up at the new topof the window. @kbd{M-v} (@code{scroll-down}) with no argument scrolls backward ina similar way, also with overlap. The number of lines of overlapacross a @kbd{C-v} or @kbd{M-v} is controlled by the variable@code{next-screen-context-lines}; by default, it is 2. The functionkeys @key{NEXT} and @key{PRIOR}, or @key{PAGEDOWN} and @key{PAGEUP},are equivalent to @kbd{C-v} and @kbd{M-v}. The commands @kbd{C-v} and @kbd{M-v} with a numeric argument scrollthe text in the selected window up or down a few lines. @kbd{C-v}with an argument moves the text and point up, together, that manylines; it brings the same number of new lines into view at the bottomof the window. @kbd{M-v} with numeric argument scrolls the textdownward, bringing that many new lines into view at the top of thewindow. @kbd{C-v} with a negative argument is like @kbd{M-v} and viceversa. The names of scroll commands are based on the direction that thetext moves in the window. Thus, the command to scroll forward iscalled @code{scroll-up} because it moves the text upward on thescreen. The keys @key{PAGEDOWN} and @key{PAGEUP} derive their namesand customary meanings from a different convention that developedelsewhere; hence the strange result that @key{PAGEDOWN} runs@code{scroll-up}.@vindex scroll-preserve-screen-position Some users like the full-screen scroll commands to keep point at thesame screen line. To enable this behavior, set the variable@code{scroll-preserve-screen-position} to a non-@code{nil} value. Inthis mode, when scrolling shifts point off the screen, or into thescrolling margins, Emacs moves point to keep the same verticalposition within the window. This mode is convenient for browsingthrough a file by scrolling by screenfuls; if you come back to thescreen where you started, point goes back to the line where itstarted. However, this mode is inconvenient when you move to the nextscreen in order to move point to the text there. Another way to do scrolling is with @kbd{C-l} with a numeric argument.@kbd{C-l} does not clear the screen when given an argument; it only scrollsthe selected window. With a positive argument @var{n}, it repositions textto put point @var{n} lines down from the top. An argument of zero putspoint on the very top line. Point does not move with respect to the text;rather, the text and point move rigidly on the screen. @kbd{C-l} with anegative argument puts point that many lines from the bottom of the window.For example, @kbd{C-u - 1 C-l} puts point on the bottom line, and @kbd{C-u- 5 C-l} puts it five lines from the bottom. @kbd{C-u C-l} scrolls to putpoint at the center (vertically) of the selected window.@kindex C-M-l@findex reposition-window The @kbd{C-M-l} command (@code{reposition-window}) scrolls the currentwindow heuristically in a way designed to get useful information ontothe screen. For example, in a Lisp file, this command tries to get theentire current defun onto the screen if possible.@vindex scroll-conservatively Scrolling happens automatically when point moves out of the visibleportion of the text. Normally, automatic scrolling centers pointvertically within the window. However, if you set@code{scroll-conservatively} to a small number @var{n}, then if youmove point just a little off the screen---less than @var{n}lines---then Emacs scrolls the text just far enough to bring pointback on screen. By default, @code{scroll-conservatively} is 0.@cindex aggressive scrolling@vindex scroll-up-aggressively@vindex scroll-down-aggressively When the window does scroll by a longer distance, you can controlhow aggressively it scrolls, by setting the variables@code{scroll-up-aggressively} and @code{scroll-down-aggressively}.The value of @code{scroll-up-aggressively} should be either@code{nil}, or a fraction @var{f} between 0 and 1. A fractionspecifies where on the screen to put point when scrolling upward.More precisely, when a window scrolls up because point is above thewindow start, the new start position is chosen to put point @var{f}part of the window height from the top. The larger @var{f}, the moreaggressive the scrolling. @code{nil}, which is the default, scrolls to put point at the center.So it is equivalent to .5. Likewise, @code{scroll-down-aggressively} is used for scrollingdown. The value, @var{f}, specifies how far point should be placedfrom the bottom of the window; thus, as with@code{scroll-up-aggressively}, a larger value is more aggressive.@vindex scroll-margin The variable @code{scroll-margin} restricts how close point can cometo the top or bottom of a window. Its value is a number of screenlines; if point comes within that many lines of the top or bottom of thewindow, Emacs recenters the window. By default, @code{scroll-margin} is0.@node Horizontal Scrolling@section Horizontal Scrolling@cindex horizontal scrolling @dfn{Horizontal scrolling} means shifting all the lines sidewayswithin a window---so that some of the text near the left margin is notdisplayed at all. Emacs does this automatically in any window thatuses line truncation rather than continuation: whenever point movesoff the left or right edge of the screen, Emacs scrolls the bufferhorizontally to make point visible. When a window has been scrolled horizontally, text lines are truncatedrather than continued (@pxref{Continuation Lines}), with a @samp{$}appearing in the first column when there is text truncated to the left,and in the last column when there is text truncated to the right. You can use these commands to do explicit horizontal scrolling.@table @kbd@item C-x <Scroll text in current window to the left (@code{scroll-left}).@item C-x >Scroll to the right (@code{scroll-right}).@end table@kindex C-x <@kindex C-x >@findex scroll-left@findex scroll-right The command @kbd{C-x <} (@code{scroll-left}) scrolls the selectedwindow to the left by @var{n} columns with argument @var{n}. This movespart of the beginning of each line off the left edge of the window.With no argument, it scrolls by almost the full width of the window (twocolumns less, to be precise). @kbd{C-x >} (@code{scroll-right}) scrolls similarly to the right. Thewindow cannot be scrolled any farther to the right once it is displayednormally (with each line starting at the window's left margin);attempting to do so has no effect. This means that you don't have tocalculate the argument precisely for @w{@kbd{C-x >}}; any sufficiently largeargument will restore the normal display. If you scroll a window horizontally by hand, that sets a lower boundfor automatic horizontal scrolling. Automatic scrolling will continueto scroll the window, but never farther to the right than the amountyou previously set by @code{scroll-left}.@vindex hscroll-margin The value of the variable @code{hscroll-margin} controls how closeto the window's edges point is allowed to get before the window willbe automatically scrolled. It is measured in columns. If the valueis 5, then moving point within 5 columns of the edge causes horizontalscrolling away from that edge.@vindex hscroll-step The variable @code{hscroll-step} determines how many columns toscroll the window when point gets too close to the edge. If it'szero, horizontal scrolling centers point horizontally within thewindow. If it's a positive integer, it specifies the number ofcolumns to scroll by. If it's a floating-point number, it specifiesthe fraction of the window's width to scroll by. The default is zero.@vindex auto-hscroll-mode To disable automatic horizontal scrolling, set the variable@code{auto-hscroll-mode} to @code{nil}.@node Fringes@section Window Fringes@cindex fringes On a graphical display, each Emacs window normally has narrow@dfn{fringes} on the left and right edges. The fringes displayindications about the text in the window. The most common use of the fringes is to indicate a continuationline, when one line of text is split into multiple lines on thescreen. The left fringe shows a curving arrow for each screen lineexcept the first, indicating that ``this is not the real beginning.''The right fringe shows a curving arrow for each screen line except thelast, indicating that ``this is not the real end.'' The fringes indicate line truncation with short horizontal arrowsmeaning ``there's more text on this line which is scrolledhorizontally out of view;'' clicking the mouse on one of the arrowsscrolls the display horizontally in the direction of the arrow. Thefringes also indicate other things such as empty lines, or where aprogram you are debugging is executing (@pxref{Debuggers}).@findex set-fringe-style@findex fringe-mode You can enable and disable the fringes for all frames using@kbd{M-x fringe-mode}. To enable and disable the fringesfor the selected frame, use @kbd{M-x set-fringe-style}.@node Useless Whitespace@section Useless Whitespace@cindex trailing whitespace@cindex whitespace, trailing@vindex show-trailing-whitespace It is easy to leave unnecessary spaces at the end of a line, orempty lines at the end of a file, without realizing it. In mostcases, this @dfn{trailing whitespace} has no effect, but there arespecial circumstances where it matters. You can make trailing whitespace at the end of a line visible on thescreen by setting the buffer-local variable@code{show-trailing-whitespace} to @code{t}. Then Emacs displaystrailing whitespace in the face @code{trailing-whitespace}. This feature does not apply when point is at the end of the linecontaining the whitespace. Strictly speaking, that is ``trailingwhitespace'' nonetheless, but displaying it specially in that caselooks ugly while you are typing in new text. In this special case,the location of point is enough to show you that the spaces arepresent.@findex delete-trailing-whitespace To delete all trailing whitespace within the current buffer'saccessible portion (@pxref{Narrowing}), type @kbd{M-xdelete-trailing-whitespace @key{RET}}. (This command does not removethe form-feed characters.)@vindex indicate-unused-lines@vindex default-indicate-empty-lines@cindex unused lines@cindex fringes, and unused line indication Emacs can indicate unused lines at the end of the window with asmall image in the left fringe (@pxref{Fringes}). The image appearsfor window lines that do not correspond to any buffer text. Blanklines at the end of the buffer then stand out because they do not havethis image in the fringe. To enable this feature, set the buffer-local variable@code{indicate-unused-lines} to a non-@code{nil} value. The defaultvalue of this variable is controlled by the variable@code{default-indicate-unused-lines}; by setting that variable, youcan enable or disable this feature for all new buffers. (This featurecurrently doesn't work on character terminals.)@node Follow Mode@section Follow Mode@cindex Follow mode@cindex mode, Follow@findex follow-mode@cindex windows, synchronizing@cindex synchronizing windows @dfn{Follow mode} is a minor mode that makes two windows showing thesame buffer scroll as one tall ``virtual window.'' To use Follow mode,go to a frame with just one window, split it into two side-by-sidewindows using @kbd{C-x 3}, and then type @kbd{M-x follow-mode}. Fromthen on, you can edit the buffer in either of the two windows, or scrolleither one; the other window follows it. In Follow mode, if you move point outside the portion visible in onewindow and into the portion visible in the other window, that selectsthe other window---again, treating the two as if they were parts ofone large window. To turn off Follow mode, type @kbd{M-x follow-mode} a second time.@node Selective Display@section Selective Display@cindex selective display@findex set-selective-display@kindex C-x $ Emacs has the ability to hide lines indented more than a certain numberof columns (you specify how many columns). You can use this to get anoverview of a part of a program. To hide lines, type @kbd{C-x $} (@code{set-selective-display}) with anumeric argument @var{n}. Then lines with at least @var{n} columns ofindentation disappear from the screen. The only indication of theirpresence is that three dots (@samp{@dots{}}) appear at the end of eachvisible line that is followed by one or more hidden ones. The commands @kbd{C-n} and @kbd{C-p} move across the hidden lines asif they were not there. The hidden lines are still present in the buffer, and most editingcommands see them as usual, so you may find point in the middle of thehidden text. When this happens, the cursor appears at the end of theprevious line, after the three dots. If point is at the end of thevisible line, before the newline that ends it, the cursor appears beforethe three dots. To make all lines visible again, type @kbd{C-x $} with no argument.@vindex selective-display-ellipses If you set the variable @code{selective-display-ellipses} to@code{nil}, the three dots do not appear at the end of a line thatprecedes hidden lines. Then there is no visible indication of thehidden lines. This variable becomes local automatically when set.@node Optional Mode Line@section Optional Mode Line Features@cindex buffer size display@cindex display of buffer size@findex size-indication-mode The buffer percentage @var{pos} indicates the percentage of thebuffer above the top of the window. You can additionally display thesize of the buffer by typing @kbd{M-x size-indication-mode} to turn onSize Indication mode. The size will be displayed immediatelyfollowing the buffer percentage like this:@example@var{POS} of @var{SIZE}@end example@noindentHere @var{SIZE} is the human readable representation of the number ofcharacters in the buffer, which means that @samp{k} for 10^3, @samp{M}for 10^6, @samp{G} for 10^9, etc., are used to abbreviate.@cindex narrowing, and buffer size display If you have narrowed the buffer (@pxref{Narrowing}), the size of theaccessible part of the buffer is shown.@cindex line number display@cindex display of line number@findex line-number-mode The current line number of point appears in the mode line when LineNumber mode is enabled. Use the command @kbd{M-x line-number-mode} toturn this mode on and off; normally it is on. The line number appearsafter the buffer percentage @var{pos}, with the letter @samp{L} toindicate what it is. @xref{Minor Modes}, for more information aboutminor modes and about how to use this command.@cindex narrowing, and line number display If you have narrowed the buffer (@pxref{Narrowing}), the displayedline number is relative to the accessible portion of the buffer.@vindex line-number-display-limit If the buffer is very large (larger than the value of@code{line-number-display-limit}), then the line number doesn't appear.Emacs doesn't compute the line number when the buffer is large, becausethat would be too slow. Set it to @code{nil} to remove the limit.@vindex line-number-display-limit-width Line-number computation can also be slow if the lines in the bufferare too long. For this reason, Emacs normally doesn't display linenumbers if the average width, in characters, of lines near point islarger than the value of the variable@code{line-number-display-limit-width}. The default value is 200characters.@cindex Column Number mode@cindex mode, Column Number@findex column-number-mode You can also display the current column number by turning on ColumnNumber mode. It displays the current column number preceded by theletter @samp{C}. Type @kbd{M-x column-number-mode} to toggle this mode.@findex display-time@cindex time (on mode line) Emacs can optionally display the time and system load in all modelines. To enable this feature, type @kbd{M-x display-time} or customizethe option @code{display-time-mode}. The information added to the modeline usually appears after the buffer name, before the mode names andtheir parentheses. It looks like this:@example@var{hh}:@var{mm}pm @var{l.ll}@end example@noindent@vindex display-time-24hr-formatHere @var{hh} and @var{mm} are the hour and minute, followed always by@samp{am} or @samp{pm}. @var{l.ll} is the average number of runningprocesses in the whole system recently. (Some fields may be missing ifyour operating system cannot support them.) If you prefer time displayin 24-hour format, set the variable @code{display-time-24hr-format}to @code{t}.@cindex mail (on mode line)@vindex display-time-use-mail-icon@vindex display-time-mail-face@vindex display-time-mail-file@vindex display-time-mail-directory The word @samp{Mail} appears after the load level if there is mailfor you that you have not read yet. On a graphical display you can usean icon instead of @samp{Mail} by customizing@code{display-time-use-mail-icon}; this may save some space on the modeline. You can customize @code{display-time-mail-face} to make the mailindicator prominent. Use @code{display-time-mail-file} to specifythe mail file to check, or set @code{display-time-mail-directory}to specify the directory to check for incoming mail (any nonempty regularfile in the directory is considered as ``newly arrived mail'').@cindex mode line, 3D appearance@cindex attributes of mode line, changing@cindex non-integral number of lines in a window By default, the mode line is drawn on graphics displays with3D-style highlighting, like that of a button when it is not beingpressed. If you don't like this effect, you can disable the 3Dhighlighting of the mode line, by customizing the attributes of the@code{mode-line} face in your @file{.emacs} init file, like this:@example(set-face-attribute 'mode-line nil :box nil)@end example@noindentAlternatively, you can turn off the box attribute in your@file{.Xdefaults} file:@exampleEmacs.mode-line.AttributeBox: off@end example@cindex non-selected windows, mode line appearance By default, the mode line of nonselected windows is displayed in adifferent face, called @code{mode-line-inactive}. Only the selectedwindow is displayed in the @code{mode-line} face. This helps showwhich window is selected. When the minibuffer is selected, sinceit has no mode line, the window from which you activated the minibufferhas its mode line displayed using @code{mode-line}; as a result,ordinary entry to the minibuffer does not change any mode lines.@vindex mode-line-in-non-selected-windows You can disable use of @code{mode-line-inactive} by setting variable@code{mode-line-in-non-selected-windows} to @code{nil}; then all modelines are displayed in the @code{mode-line} face.@node Text Display@section How Text Is Displayed@cindex characters (in text) @acronym{ASCII} printing characters (octal codes 040 through 0176) in Emacsbuffers are displayed with their graphics, as are non-ASCII multibyteprinting characters (octal codes above 0400). Some @acronym{ASCII} control characters are displayed in special ways. Thenewline character (octal code 012) is displayed by starting a new line.The tab character (octal code 011) is displayed by moving to the nexttab stop column (normally every 8 columns). Other @acronym{ASCII} control characters are normally displayed as a caret(@samp{^}) followed by the non-control version of the character; thus,control-A is displayed as @samp{^A}. Non-@acronym{ASCII} characters 0200 through 0237 (octal) are displayed withoctal escape sequences; thus, character code 0230 (octal) is displayedas @samp{\230}. The display of character codes 0240 through 0377(octal) may be either as escape sequences or as graphics. They do notnormally occur in multibyte buffers, but if they do, they are displayedas Latin-1 graphics. In unibyte mode, if you enable European displaythey are displayed using their graphics (assuming your terminal supportsthem), otherwise as escape sequences. @xref{Single-Byte CharacterSupport}.@node Display Custom@section Customization of Display This section contains information for customization only. Beginningusers should skip it.@vindex mode-line-inverse-video The variable @code{mode-line-inverse-video} is an obsolete way ofcontrolling whether the mode line is displayed in inverse video; thepreferred way of doing this is to change the @code{mode-line} face.@xref{Mode Line}. However, if @code{mode-line-inverse-video} has avalue of @code{nil}, then the @code{mode-line} face will be ignored,and mode-lines will be drawn using the default text face.@xref{Faces}.@vindex inverse-video If the variable @code{inverse-video} is non-@code{nil}, Emacs attemptsto invert all the lines of the display from what they normally are.@vindex visible-bell If the variable @code{visible-bell} is non-@code{nil}, Emacs attemptsto make the whole screen blink when it would normally make an audible bellsound. This variable has no effect if your terminal does not have a wayto make the screen blink.@refill@vindex no-redraw-on-reenter When you reenter Emacs after suspending, Emacs normally clears thescreen and redraws the entire display. On some terminals with more thanone page of memory, it is possible to arrange the termcap entry so thatthe @samp{ti} and @samp{te} strings (output to the terminal when Emacsis entered and exited, respectively) switch between pages of memory soas to use one page for Emacs and another page for other output. Thenyou might want to set the variable @code{no-redraw-on-reenter}non-@code{nil}; this tells Emacs to assume, when resumed, that thescreen page it is using still contains what Emacs last wrote there.@vindex echo-keystrokes The variable @code{echo-keystrokes} controls the echoing of multi-characterkeys; its value is the number of seconds of pause required to cause echoingto start, or zero meaning don't echo at all. @xref{Echo Area}.@vindex ctl-arrow If the variable @code{ctl-arrow} is @code{nil}, all control characters inthe buffer are displayed with octal escape sequences, except for newlineand tab. Altering the value of @code{ctl-arrow} makes it local to thecurrent buffer; until that time, the default value is in effect. Thedefault is initially @code{t}. @xref{Display Tables,, Display Tables,elisp, The Emacs Lisp Reference Manual}.@vindex tab-width Normally, a tab character in the buffer is displayed as whitespace whichextends to the next display tab stop position, and display tab stops comeat intervals equal to eight spaces. The number of spaces per tab iscontrolled by the variable @code{tab-width}, which is made local bychanging it, just like @code{ctl-arrow}. Note that how the tab characterin the buffer is displayed has nothing to do with the definition of@key{TAB} as a command. The variable @code{tab-width} must have aninteger value between 1 and 1000, inclusive.@c @vindex truncate-lines @c No index entry here, because we have one@c in the continuation section. If the variable @code{truncate-lines} is non-@code{nil}, then eachline of text gets just one screen line for display; if the text line istoo long, display shows only the part that fits. If@code{truncate-lines} is @code{nil}, then long text lines display asmore than one screen line, enough to show the whole text of the line.@xref{Continuation Lines}. Altering the value of @code{truncate-lines}makes it local to the current buffer; until that time, the default valueis in effect. The default is initially @code{nil}.@c @vindex truncate-partial-width-windows @c Idx entry is in Split Windows. If the variable @code{truncate-partial-width-windows} isnon-@code{nil}, it forces truncation rather than continuation in anywindow less than the full width of the screen or frame, regardless ofthe value of @code{truncate-lines}. For information about side-by-sidewindows, see @ref{Split Window}. See also @ref{Display,, Display,elisp, The Emacs Lisp Reference Manual}.@vindex overflow-newline-into-fringe If the variable @code{overflow-newline-into-fringe} isnon-@code{nil} on a window system, it specifies that lines which areexactly as wide as the window (not counting the final newlinecharacter) shall not be broken into two lines on the display (withjust the newline on the second line). Instead, the newlineoverflows into the right fringe, and the cursor will be displayed inthe fringe when positioned on that newline.@vindex indicate-buffer-boundaries On a window system, Emacs may indicate the buffer boundaries in thefringes. The buffer boundaries, i.e. first and last line in thebuffer, can be marked with angle bitmaps in the left or right fringe.This can be combined with up and down arrow bitmaps shown at the topand bottom of the left or right fringe if the window can be scrolledin either direction. The buffer-local variable @code{indicate-buffer-boundaries} controlshow the buffer boundaries and window scrolling is indicated in thefringes. If the value is @code{left} or @code{right}, both angle and arrowbitmaps are displayed in the left or right fringe, respectively. If value is an alist, each element @code{(@var{indicator} .@var{position})} specifies the position of one of the indicators.The @var{indicator} must be one of @code{top}, @code{bottom},@code{up}, @code{down}, or @code{t} which specifies the defaultposition for the indicators not present in the alist.The @var{position} is one of @code{left}, @code{right}, or @code{ni}which specifies not to show this indicator. For example, @code{((top . left) (t . right))} places the top anglebitmap in left fringe, the bottom angle bitmap in right fringe, andboth arrow bitmaps in right fringe. To show just the angle bitmaps inthe left fringe, but no arrow bitmaps, use @code{((top . left)(bottom . left))}.@vindex default-indicate-buffer-boundaries The value of the variable @code{default-indicate-buffer-boundaries}is the default value for @code{indicate-buffer-boundaries} in buffersthat do not override it.@vindex baud-rate The variable @code{baud-rate} holds the output speed of theterminal, as far as Emacs knows. Setting this variable does notchange the speed of actual data transmission, but the value is usedfor calculations. On terminals, it affects padding, and decisionsabout whether to scroll part of the screen or redraw it instead.It also affects the behavior of incremental search. On window-systems, @code{baud-rate} is only used to determine howfrequently to look for pending input during display updating. Ahigher value of @code{baud-rate} means that check for pending inputwill be done less frequently. You can customize the way any particular character code is displayedby means of a display table. @xref{Display Tables,, Display Tables,elisp, The Emacs Lisp Reference Manual}.@cindex hourglass pointer display@vindex hourglass-delay On a window system, Emacs can optionally display the mouse pointerin a special shape to say that Emacs is busy. To turn this feature onor off, customize the group @code{cursor}. You can also control theamount of time Emacs must remain busy before the busy indicator isdisplayed, by setting the variable @code{hourglass-delay}.@findex tty-suppress-bold-inverse-default-colors On some text-only terminals, bold face and inverse video togetherresult in text that is hard to read. Call the function@code{tty-suppress-bold-inverse-default-colors} with a non-@code{nil}argument to suppress the effect of bold-face in this case.@node Cursor Display@section Displaying the Cursor@findex blink-cursor-mode@vindex blink-cursor-alist@cindex cursor, locating visually@cindex cursor, blinking You can customize the cursor's color, and whether it blinks, usingthe @code{cursor} Custom group (@pxref{Easy Customization}). Ongraphical terminals, the command @kbd{M-x blink-cursor-mode} enablesor disables the blinking of the cursor. (On text terminals, theterminal itself blinks the cursor, and Emacs has no control over it.)You can control how the cursor appears when it blinks off by settingthe variable @code{blink-cursor-alist}.@cindex cursor in non-selected windows@vindex cursor-in-non-selected-windows Normally, the cursor appears in non-selected windows in the ``off''state, with the same appearance as when the blinking cursor blinks``off''. For a box cursor, this is a hollow box; for a bar cursor,this is a thinner bar. To turn off cursors in non-selected windows,customize the option @code{cursor-in-non-selected-windows} and assignit a @code{nil} value.@vindex x-stretch-cursor@cindex wide block cursor On graphical terminals, Emacs can optionally draw the block cursoras wide as the character under the cursor---for example, if the cursoris on a tab character, it would cover the full width occupied by thattab character. To enable this feature, set the variable@code{x-stretch-cursor} to a non-@code{nil} value.@findex hl-line-mode@findex global-hl-line-mode@cindex highlight current line If you find it hard to see the cursor, you might like HL Line mode,a minor mode that highlights the line containing point. Use @kbd{M-xhl-line-mode} to enable or disable it in the current buffer. @kbd{M-xglobal-hl-line-mode} enables or disables the same mode globally.@ignore arch-tag: 2219f910-2ff0-4521-b059-1bd231a536c4@end ignore