Frames and Graphical Displays
*****************************

When using a graphical display, you can create multiple system-level ``windows'' in a single Emacs session.  We refer to these system-level windows as frames.  A frame initially contains a single Emacs window; however, you can subdivide this Emacs window into smaller windows, all fitting into the same frame.  Each frame normally contains its own echo area and minibuffer.

To avoid confusion, we reserve the word ``window'' for the subdivisions that Emacs implements, and never use it to refer to a frame.

Any editing you do in one frame affects the other frames.  For instance, if you put text in the kill ring in one frame, you can yank it in another frame.  If you exit Emacs through C-x C-c in one frame, it terminates all the frames.  To delete just one frame, use C-x 5 0 (that is zero, not o).

Emacs compiled for MS-DOS emulates some windowing functionality, so that you can use many of the features described in this chapter. See MS-DOS Mouse.

Mouse Commands for Editing
==========================

Mouse-1
     Move point to where you click (mouse-set-point).

Drag-Mouse-1
     Activate the region around the text selected by dragging, and copy it to the kill ring (mouse-set-region).

Mouse-2
     Yank the last killed text at the click position (mouse-yank-at-click).

Mouse-3
     If the region is active, move the nearer end of the region to the click position; otherwise, set mark at the current value of point and point at the click position.  Save the resulting region in the kill ring; on a second click, kill it (mouse-save-then-kill).

The most basic mouse command is mouse-set-point, which is called by clicking with the left mouse button, Mouse-1, in the text area of a window.  This moves point to the position where you clicked.

Normally, Emacs does not distinguish between ordinary mouse clicks and clicks that select a frame.  When you click on a frame to select it, that also changes the selected window and cursor position according to the mouse click position.  On the X window system, you can change this behavior by setting the variable x-mouse-click-focus-ignore-position to t.  Then the first click selects the frame, but does not affect the selected window or cursor position.  If you click again in the same place, that click will be in the selected frame, so it will change the window or cursor position.

Holding down Mouse-1 and ``dragging'' the mouse over a stretch of text activates the region around that text (mouse-set-region).  See Mark.  Emacs places the mark where you started holding down the mouse button, and point where you release it.  In addition, the region is copied into the kill ring (see Kill Ring).  If you don't want Emacs to copy the region, change the variable mouse-drag-copy-region to nil.

If you move the mouse off the top or bottom of the window while dragging, the window scrolls at a steady rate until you move the mouse back into the window.  This way, you can select regions that don't fit entirely on the screen.  The number of lines scrolled per step depends on how far away from the window edge the mouse has gone; the variable mouse-scroll-min-lines specifies a minimum step size.

Clicking with the middle mouse button, Mouse-2, moves point to the position where you clicked and inserts the contents of the primary selection (mouse-yank-primary).  See Primary Selection. This behavior is consistent with other X applications; alternatively, you can rebind Mouse-2 to mouse-yank-at-click, which performs a yank at point.

If you change the variable mouse-yank-at-point to a non-nil value, Mouse-2 does not move point; it inserts the text at point, regardless of where you clicked or even which of the frame's windows you clicked on.  This variable affects both mouse-yank-primary and mouse-yank-at-click.

Clicking with the right mouse button, Mouse-3, runs the command mouse-save-then-kill.  This performs several actions depending on where you click and the status of the region:

  * If no region is active, clicking Mouse-3 activates the region, placing the mark where point was and point at the clicked position. In addition, the text in the region is copied to the kill ring.

  * If a region is active, clicking Mouse-3 adjusts the nearer end of the region by moving it to the clicked position.  The adjusted region's text is copied to the kill ring; if the text in the original region was already on the kill ring, it replaces it there.

  * If you originally specified the region using a double or triple Mouse-1, so that the region is defined to consist of entire words or lines, then adjusting the region with Mouse-3 also proceeds by entire words or lines.

  * If you use Mouse-3 a second time consecutively, at the same place, that kills the region already selected.  Thus, the simplest way to kill text with the mouse is to click Mouse-1 at one end, then click Mouse-3 twice at the other end.  To copy the text into the kill ring without deleting it from the buffer, press Mouse-3 just once---or just drag across the text with Mouse-1.  Then you can copy it elsewhere by yanking it.

Whenever you set the region using any of the mouse commands described above, the mark will be deactivated by any subsequent unshifted cursor motion command, in addition to the usual ways of deactivating the mark.  See Shift Selection.  While the region remains active, typing Backspace or Delete deletes the text in that region and deactivates the mark; this behavior follows a convention established by other graphical programs, and it does not apply when you set the region any other way, including shift-selection (see Shift Selection).

Many graphical applications also follow the convention that insertion while text is selected deletes the selected text.  You can make Emacs behave this way by enabling Delete Selection mode. See Using Region.

Mouse Commands for Words and Lines
==================================

These variants of Mouse-1 select entire words or lines at a time.  Emacs activates the region around the selected text, which is also copied to the kill ring.

Double-Mouse-1
     Select the text around the word which you click on.

     Double-clicking on a character with ``symbol'' syntax (such as underscore, in C mode) selects the symbol surrounding that character. Double-clicking on a character with open- or close-parenthesis syntax selects the parenthetical grouping which that character starts or ends.  Double-clicking on a character with string-delimiter syntax (such as a singlequote or doublequote in C) selects the string constant (Emacs uses heuristics to figure out whether that character is the beginning or the end of it).

Double-Drag-Mouse-1
     Select the text you drag across, in the form of whole words.

Triple-Mouse-1
     Select the line you click on.

Triple-Drag-Mouse-1
     Select the text you drag across, in the form of whole lines.

Following References with the Mouse
===================================

Some Emacs buffers include buttons.  A button is a piece of text that performs some action when you activate it, such as following a reference.  Usually, a button's text is visually highlighted: it is underlined, or a box is drawn around it.  If you move the mouse over a button, the shape of the mouse cursor changes and the button lights up (if you change the variable mouse-highlight to nil, Emacs disables this highlighting).

You can activate a button by moving point to it and typing RET, or by clicking either Mouse-1 or Mouse-2 on the button.  For example, typing RET or clicking on a file name in a Dired buffer visits that file (see Dired).  Doing it on an error message in the *Compilation* buffer goes to the source code for that error message (see Compilation).  Doing it on a completion in the *Completions* buffer chooses that completion (see Completion).

Although clicking Mouse-1 on a button usually activates that button, if you hold the mouse button down for a short period of time before releasing it (specifically, for more than 450 milliseconds), then Emacs moves point where you clicked instead.  This behavior allows you to use the mouse to move point over a button without following it.  Dragging---moving the mouse while it is held down---has its usual behavior of setting the region, even if you drag from or onto a button.

Normally, clicking Mouse-1 on a button activates the button even if it is in a nonselected window.  If you change the variable mouse-1-click-in-non-selected-windows to nil, clicking Mouse-1 on a button in an un-selected window moves point to the clicked position and selects that window, without activating the button.

In Emacs versions before 22, only Mouse-2 activates buttons and Mouse-1 always sets point.  If you prefer this older behavior, set the variable mouse-1-click-follows-link to nil.  This variable also lets you choose various other alternatives for following links with the mouse.  Type C-h v mouse-1-click-follows-link RET for more details.

Mouse Clicks for Menus
======================

Several mouse clicks with the CTRL and SHIFT modifiers bring up menus.

C-Mouse-1
     This menu is for selecting a buffer.

     The MSB (``mouse select buffer'') global minor mode makes this menu smarter and more customizable.  See Buffer Menus.

C-Mouse-2
     This menu is for specifying faces and other text properties for editing formatted text.  See Formatted Text.

C-Mouse-3
     This menu is mode-specific.  For most modes if Menu-bar mode is on, this menu has the same items as all the mode-specific menu-bar menus put together.  Some modes may specify a different menu for this button. (Some systems use Mouse-3 for a mode-specific menu.  We took a survey of users, and found they preferred to keep Mouse-3 for selecting and killing regions.  Hence the decision to use C-Mouse-3 for this menu.  To use Mouse-3 instead, do (global-set-key [mouse-3] 'mouse-popup-menubar-stuff).)  If Menu-bar mode is off, this menu contains all the items which would be present in the menu bar---not just the mode-specific ones---so that you can access them without having to display the menu bar.

S-Mouse-1
     This menu is for changing the default face within the window's buffer. See Temporary Face Changes.

Mode Line Mouse Commands
========================

You can use mouse clicks on window mode lines to select and manipulate windows.

Some areas of the mode line, such as the buffer name, and major and minor mode names, have their own special mouse bindings.  These areas are highlighted when you hold the mouse over them, and information about the special bindings will be displayed (see Tooltips).  This section's commands do not apply in those areas.

Mouse-1
     Mouse-1 on a mode line selects the window it belongs to.  By dragging Mouse-1 on the mode line, you can move it, thus changing the height of the windows above and below.  Changing heights with the mouse in this way never deletes windows, it just refuses to make any window smaller than the minimum height.

Mouse-2
     Mouse-2 on a mode line expands that window to fill its frame.

Mouse-3
     Mouse-3 on a mode line deletes the window it belongs to.  If the frame has only one window, it buries the current buffer instead, and switches to another buffer.

C-Mouse-2
     C-Mouse-2 on a mode line splits the window above horizontally, above the place in the mode line where you click.

Using Mouse-1 on the divider between two side-by-side mode lines, you can move the vertical boundary left or right.  Using C-Mouse-2 on a scroll bar splits the corresponding window vertically.  See Split Window.

Creating Frames
===============

The prefix key C-x 5 is analogous to C-x 4, with parallel subcommands.  The difference is that C-x 5 commands create a new frame rather than just a new window in the selected frame (see Pop Up Window).  If an existing visible or iconified (``minimized'') frame already displays the requested material, these commands use the existing frame, after raising or deiconifying (``un-minimizing'') as necessary.

The various C-x 5 commands differ in how they find or create the buffer to select:

C-x 5 2
     Create a new frame (make-frame-command).

C-x 5 b BUFNAME RET
     Select buffer BUFNAME in another frame.  This runs switch-to-buffer-other-frame.

C-x 5 f FILENAME RET
     Visit file FILENAME and select its buffer in another frame.  This runs find-file-other-frame.  See Visiting.

C-x 5 d DIRECTORY RET
     Select a Dired buffer for directory DIRECTORY in another frame. This runs dired-other-frame.  See Dired.

C-x 5 m
     Start composing a mail message in another frame.  This runs mail-other-frame.  It is the other-frame variant of C-x m. See Sending Mail.

C-x 5 .
     Find a tag in the current tag table in another frame.  This runs find-tag-other-frame, the multiple-frame variant of M-.. See Tags.

C-x 5 r FILENAME RET
     Visit file FILENAME read-only, and select its buffer in another frame.  This runs find-file-read-only-other-frame. See Visiting.

You can control the appearance of new frames you create by setting the frame parameters in default-frame-alist.  You can use the variable initial-frame-alist to specify parameters that affect only the initial frame.  See Initial Parameters (The Emacs Lisp Reference Manual), for more information.

Here is an example of using default-frame-alist to specify the default foreground color and font:

     (add-to-list 'default-frame-alist '(font . "10x20"))
     (add-to-list 'default-frame-alist
                  '(foreground-color . "blue"))

By putting such customizations in your init file, you can control the appearance of all the frames Emacs creates, including the initial one (see Init File).  See Fonts, for other ways to set the default font.

Frame Commands
==============

The following commands let you create, delete and operate on frames:

C-z
     Minimize (or ``iconify) the selected Emacs frame (suspend-frame).  See Exiting.

C-x 5 0
     Delete the selected frame (delete-frame).  This is not allowed if there is only one frame.

C-x 5 o
     Select another frame, raise it, and warp the mouse to it.  If you repeat this command, it cycles through all the frames on your terminal.

C-x 5 1
     Delete all frames except the selected one.

The C-x 5 0 (delete-frame) command will never delete the last frame, to prevent you from losing the ability to interact with the Emacs process.  Note that when Emacs is run as a daemon (see Emacs Server), there is always a ``virtual frame'' that remains after all the ordinary, interactive frames are deleted.  In this case, C-x 5 0 can delete the last interactive frame; you can use emacsclient to reconnect to the Emacs session.

On X, you may have to tell Emacs how the window manager handles focus-switching between windows, in order for C-x 5 o (other-frame) to work properly.  Unfortunately, there is no way for Emacs to detect this automatically, so you should set the variable focus-follows-mouse.  The default is nil, meaning you have to click on the window to select it (the default for most modern window managers).  You should change it to t if your window manager selects a window and gives it focus anytime you move the mouse onto the window.

The window manager that is part of MS-Windows always gives focus to a frame that raises, so this variable has no effect in the native MS-Windows build of Emacs.  However, you may still wish to set this variable to t to have Emacs automatically move the mouse pointer to the raised frame.

Fonts
=====

By default, Emacs displays text in X using a 12-point monospace font.  There are several different ways to specify a different font:

  * Click on Set Default Font in the Options menu.  To save this for future sessions, click on Save Options in the Options menu.

  * Add a line to your init file (see Init File), modifying the variable default-frame-alist to specify the font parameter (see Creating Frames), like this:

          (add-to-list 'default-frame-alist '(font . "DejaVu Sans Mono-12"))

  * Add an emacs.font X resource setting to your X resource file, like this:

          emacs.font: DejaVu Sans Mono-12

     You must restart X, or use the xrdb command, for the X resources file to take effect.  See Resources.  When specifying a font in your X resources file, you should not quote it.

  * If you are running Emacs on the GNOME desktop, you can tell Emacs to use the default system font by setting the variable font-use-system-font to t (the default is nil). For this to work, Emacs must be compiled with Gconf support; this is done automatically if the libraries are present at compile time.

  * Use the command line option -fn (or --font).  See Font X.

To check what font you're currently using, the C-u C-x = command can be helpful.  It'll describe the character under point, and also say what font it's rendered in, if the window system you're running under supports that.

On X, there are four different ways to express a ``font name''.  The first is to use a Fontconfig pattern.  Fontconfig patterns have the following form:

     FONTNAME[-FONTSIZE][:NAME1=VALUES1][:NAME2=VALUES2]...

Within this format, any of the elements in braces may be omitted. Here, FONTNAME is the family name of the font, such as Monospace or DejaVu Serif; FONTSIZE is the point size of the font (one printer's point is about 1/72 of an inch); and the NAME=VALUES entries specify settings such as the slant and weight of the font.  Each VALUES may be a single value, or a list of values separated by commas.  In addition, some property values are valid with only one kind of property name, in which case the NAME= part may be omitted.

Here is a list of common font properties:

slant
     One of italic, oblique or roman.

weight
     One of light, medium, demibold, bold or black.

style
     Some fonts define special styles which are a combination of slant and weight.  For instance, Dejavu Sans defines the book style, which overrides the slant and weight properties.

width
     One of condensed, normal, or expanded.

spacing
     One of monospace, proportional, dual-width, or charcell.

Here are some examples of Fontconfig patterns:

     Monospace
     Monospace-12
     Monospace-12:bold
     DejaVu Sans Mono:bold:italic
     Monospace-12:weight=bold:slant=italic

For a more detailed description of Fontconfig patterns, see the Fontconfig manual, which is distributed with Fontconfig and available online at http://fontconfig.org/fontconfig-user.html.

The second way to specify a font is to use a GTK font description.  These have the syntax

     FONTNAME [PROPERTIES] [FONTSIZE]

where FONTNAME is the family name, PROPERTIES is a list of property values separated by spaces, and FONTSIZE is the point size.  The properties that you may specify are as follows:

style
     One of roman, italic or oblique.  If omitted, the roman style is used.

weight
     One of medium, ultra-light, light, semi-bold, or bold.  If omitted, medium weight is used.

Here are some examples of GTK font descriptions:

     Monospace 12
     Monospace Bold Italic 12

The third way to specify a font is to use an XLFD (X Logical Font Description).  This is the traditional method for specifying fonts under X.  Each XLFD consists of fourteen words or numbers, separated by dashes, like this:

     -misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1

A wildcard character (*) in an XLFD matches any sequence of characters (including none), and ? matches any single character.  However, matching is implementation-dependent, and can be inaccurate when wildcards match dashes in a long name.  For reliable results, supply all 14 dashes and use wildcards only within a field. Case is insignificant in an XLFD.  The syntax for an XLFD is as follows:

     -MAKER-FAMILY-WEIGHT-SLANT-WIDTHTYPE-STYLE...
     ...-PIXELS-HEIGHT-HORIZ-VERT-SPACING-WIDTH-REGISTRY-ENCODING

The entries have the following meanings:

maker
     The name of the font manufacturer.

family
     The name of the font family (e.g. courier).

weight
     The font weight---normally either bold, medium or light.  Some font names support other values.

slant
     The font slant---normally r (roman), i (italic), o (oblique), ri (reverse italic), or ot (other). Some font names support other values.

widthtype
     The font width---normally normal, condensed, extended, or semicondensed (some font names support other values).

style
     An optional additional style name.  Usually it is empty---most long font names have two hyphens in a row at this point.

pixels
     The font height, in pixels.

height
     The font height on the screen, measured in tenths of a printer's point.  This is the point size of the font, times ten.  For a given vertical resolution, HEIGHT and PIXELS are proportional; therefore, it is common to specify just one of them and use * for the other.

horiz
     The horizontal resolution, in pixels per inch, of the screen for which the font is intended.

vert
     The vertical resolution, in pixels per inch, of the screen for which the font is intended.  Normally the resolution of the fonts on your system is the right value for your screen; therefore, you normally specify * for this and HORIZ.

spacing
     This is m (monospace), p (proportional) or c (character cell).

width
     The average character width, in pixels, multiplied by ten.

registry
encoding
     The X font character set that the font depicts.  (X font character sets are not the same as Emacs character sets, but they are similar.) You can use the xfontsel program to check which choices you have.  Normally you should use iso8859 for REGISTRY and 1 for ENCODING.

The fourth and final method of specifying a font is to use a ``font nickname''.  Certain fonts have shorter nicknames, which you can use instead of a normal font specification.  For instance, 6x13 is equivalent to

     -misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1

On X, Emacs recognizes two types of fonts: client-side fonts, which are provided by the Xft and Fontconfig libraries, and server-side fonts, which are provided by the X server itself. Most client-side fonts support advanced font features such as antialiasing and subpixel hinting, while server-side fonts do not. Fontconfig and GTK patterns match only client-side fonts.

You will probably want to use a fixed-width default font---that is, a font in which all characters have the same width.  For Xft and Fontconfig fonts, you can use the fc-list command to list the available fixed-width fonts, like this:

     fc-list :spacing=mono fc-list :spacing=charcell

For server-side X fonts, you can use the xlsfonts program to list the available fixed-width fonts, like this:

     xlsfonts -fn '*x*' | egrep "^[0-9]+x[0-9]+"
     xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-m*'
     xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-c*'

Any font with m or c in the SPACING field of the XLFD is a fixed-width font.  To see what a particular font looks like, use the xfd command.  For example:

     xfd -fn 6x13

displays the entire font 6x13.

While running Emacs, you can also set the font of a specific kind of text (see Faces), or a particular frame (see Frame Parameters).

Speedbar Frames
===============

The speedbar is a special frame for conveniently navigating in or operating on another frame.  The speedbar, when it exists, is always associated with a specific frame, called its attached frame; all speedbar operations act on that frame.

Type M-x speedbar to create the speedbar and associate it with the current frame.  To dismiss the speedbar, type M-x speedbar again, or select the speedbar and type q.  (You can also delete the speedbar frame like any other Emacs frame.)  If you wish to associate the speedbar with a different frame, dismiss it and call M-x speedbar from that frame.

The speedbar can operate in various modes.  Its default mode is File Display mode, which shows the files in the current directory of the selected window of the attached frame, one file per line.  Clicking on a file name visits that file in the selected window of the attached frame, and clicking on a directory name shows that directory in the speedbar (see Mouse References).  Each line also has a box, [+] or <+>, that you can click on to expand the contents of that item.  Expanding a directory adds the contents of that directory to the speedbar display, underneath the directory's own line.  Expanding an ordinary file adds a list of the tags in that file to the speedbar display; you can click on a tag name to jump to that tag in the selected window of the attached frame. When a file or directory is expanded, the [+] changes to [-]; you can click on that box to contract the item, hiding its contents.

You navigate through the speedbar using the keyboard, too.  Typing RET while point is on a line in the speedbar is equivalent to clicking the item on the current line, and SPC expands or contracts the item.  U displays the parent directory of the current directory.  To copy, delete, or rename the file on the current line, type C, D, and R respectively.  To create a new directory, type M.

Another general-purpose speedbar mode is Buffer Display mode; in this mode, the speedbar displays a list of Emacs buffers.  To switch to this mode, type b in the speedbar.  To return to File Display mode, type f.  You can also change the display mode by clicking mouse-3 anywhere in the speedbar window (or mouse-1 on the mode-line) and selecting Displays in the pop-up menu.

Some major modes, including Rmail mode, Info, and GUD, have specialized ways of putting useful items into the speedbar for you to select.  For example, in Rmail mode, the speedbar shows a list of Rmail files, and lets you move the current message to another Rmail file by clicking on its <M> box.

For more details on using and programming the speedbar, see Speedbar (Speedbar Manual).

Multiple Displays
=================

A single Emacs can talk to more than one X display.  Initially, Emacs uses just one display---the one specified with the DISPLAY environment variable or with the --display option (see Initial Options).  To connect to another display, use the command make-frame-on-display:

M-x make-frame-on-display RET DISPLAY RET
     Create a new frame on display DISPLAY.

A single X server can handle more than one screen.  When you open frames on two screens belonging to one server, Emacs knows they share a single keyboard, and it treats all the commands arriving from these screens as a single stream of input.

When you open frames on different X servers, Emacs makes a separate input stream for each server.  Each server also has its own selected frame.  The commands you enter with a particular X server apply to that server's selected frame.

It is even possible to use this feature to let two or more users type simultaneously on the two displays, within the same Emacs job. In practice, however, the different users can easily interfere with each others' edits if they are not careful.

Special Buffer Frames
=====================

You can make certain chosen buffers, which Emacs normally displays in ``another window,'' appear in special frames of their own.  To do this, set the variable special-display-buffer-names to a list of buffer names; any buffer whose name is in that list automatically gets a special frame, when an Emacs command wants to display it ``in another window.''

For example, if you set the variable this way,

     (setq special-display-buffer-names
           '("*Completions*" "*grep*" "*tex-shell*"))

then completion lists, grep output and the TeX mode shell buffer get individual frames of their own.  These frames, and the windows in them, are never automatically split or reused for any other buffers.  They continue to show the buffers they were created for, unless you alter them by hand.  Killing the special buffer deletes its frame automatically.

More generally, you can set special-display-regexps to a list of regular expressions; then a buffer gets its own frame if its name matches any of those regular expressions.  (Once again, this applies only to buffers that normally get displayed for you in ``another window.'')

The variable special-display-frame-alist specifies the frame parameters for these frames.  It has a default value, so you don't need to set it.

For those who know Lisp, an element of special-display-buffer-names or special-display-regexps can also be a list.  Then the first element is the buffer name or regular expression; the rest of the list specifies how to create the frame.  It can be an association list specifying frame parameter values; these values take precedence over parameter values specified in special-display-frame-alist.  If you specify the symbol same-window as a ``frame parameter'' in this list, with a non-nil value, that means to use the selected window if possible.  If you use the symbol same-frame as a ``frame parameter'' in this list, with a non-nil value, that means to use the selected frame if possible.

Alternatively, the value can have this form:

     (FUNCTION ARGS...)

where FUNCTION is a symbol.  Then the frame is constructed by calling FUNCTION; its first argument is the buffer, and its remaining arguments are ARGS.

An analogous feature lets you specify buffers which should be displayed in the selected window.  See Force Same Window.  The same-window feature takes precedence over the special-frame feature; therefore, if you add a buffer name to special-display-buffer-names and it has no effect, check to see whether that feature is also in use for the same buffer name.

Setting Frame Parameters
========================

These commands are available for controlling the window management behavior of the selected frame:

M-x auto-raise-mode
     Toggle whether or not the selected frame should auto-raise.  Auto-raise means that every time you move the mouse onto the frame, it raises the frame.

     Some window managers also implement auto-raise.  If you enable auto-raise for Emacs frames in your window manager, it will work, but it is beyond Emacs' control, so auto-raise-mode has no effect on it.

M-x auto-lower-mode
     Toggle whether or not the selected frame should auto-lower. Auto-lower means that every time you move the mouse off the frame, the frame moves to the bottom of the stack on the screen.

     The command auto-lower-mode has no effect on auto-lower implemented by the window manager.  To control that, you must use the appropriate window manager features.

In Emacs versions that use an X toolkit, the color-setting and font-setting functions don't affect menus and the menu bar, since they are displayed by their own widget classes.  To change the appearance of the menus and menu bar, you must use X resources (see Resources). See Colors, regarding colors.  See Font X, regarding choice of font.

Colors, fonts, and other attributes of the frame's display can also be customized by setting frame parameters in the variable default-frame-alist (see Creating Frames).  For a detailed description of frame parameters and customization, see Frame Parameters (The Emacs Lisp Reference Manual).

Scroll Bars
===========

On graphical displays, Emacs normally makes a scroll bar at the left of each Emacs window, running the height of the window. (Placing it at the left is usually more useful with overlapping frames with text starting at the left margin.)

When Emacs is compiled with GTK+ support on the X window system, or in operating systems such as Microsoft Windows or Mac OS, you can use the scroll bar as you do in other graphical applications.  If you click Mouse-1 on the scroll bar's up and down buttons, that scrolls the window by one line at a time.  Clicking Mouse-1 above or below the scroll bar's inner box scrolls the window by nearly the entire height of the window, like M-v and C-v respectively (see Moving Point).  Dragging the inner box with Mouse-1 scrolls the window continuously.

If Emacs is compiled without GTK+ support on the X window system, the scroll bar behaves differently.  The scroll bar's inner box is drawn to represent the portion of the buffer currently displayed, with the entire height of the scroll bar representing the entire length of the buffer.  Mouse-1 anywhere on the scroll bar scrolls forward like C-v, and Mouse-3 scrolls backward like M-v. Clicking Mouse-2 in the scroll bar lets you move or drag the inner box up and down.

You can also click C-Mouse-2 in the scroll bar to split a window vertically.  The split occurs on the line where you click.

You can toggle the use of the scroll bar with the command M-x scroll-bar-mode.  With a prefix argument, this command turns use of scroll bars on if and only if the argument is positive.  This command applies to all frames, including frames yet to be created.  Customize the variable scroll-bar-mode to control the use of scroll bars at startup.  You can use it to specify that they are placed at the right of windows if you prefer that.  You have to set this variable through the Customize interface (see Easy Customization), or it will not work properly.  You can also use the X resource verticalScrollBars to control the initial setting of Scroll Bar mode.  See Resources.

To enable or disable scroll bars for just the selected frame, use the command M-x toggle-scroll-bar.

You can control the scroll bar width by changing the value of the scroll-bar-width frame parameter.

Scrolling With ``Wheeled'' Mice
===============================

Some mice have a ``wheel'' instead of a third button.  You can usually click the wheel to act as either Mouse-2 or Mouse-3, depending on the setup.  You can also use the wheel to scroll windows instead of using the scroll bar or keyboard commands. Mouse wheel support only works if the system generates appropriate events; whenever possible, it is turned on by default.  To toggle this feature, use M-x mouse-wheel-mode.

The two variables mouse-wheel-follow-mouse and mouse-wheel-scroll-amount determine where and by how much buffers are scrolled.  The variable mouse-wheel-progressive-speed determines whether the scroll speed is linked to how fast you move the wheel.

Drag and Drop
=============

Emacs supports drag and drop using the mouse.  For instance, dropping text onto an Emacs frame inserts the text where it is dropped. Dropping a file onto an Emacs frame visits that file.  As a special case, dropping the file on a Dired buffer moves or copies the file (according to the conventions of the application it came from) into the directory displayed in that buffer.

Dropping a file normally visits it in the window you drop it on.  If you prefer to visit the file in a new window in such cases, customize the variable dnd-open-file-other-window.

The XDND and Motif drag and drop protocols, and the old KDE 1.x protocol, are currently supported.

Menu Bars
=========

You can turn display of menu bars on or off with M-x menu-bar-mode or by customizing the variable menu-bar-mode. With no argument, this command toggles Menu Bar mode, a minor mode.  With an argument, the command turns Menu Bar mode on if the argument is positive, off if the argument is not positive.  You can use the X resource menuBar to control the initial setting of Menu Bar mode.  See Resources.

Expert users often turn off the menu bar, especially on text-only terminals, where this makes one additional line available for text. If the menu bar is off, you can still pop up a menu of its contents with C-Mouse-3 on a display which supports pop-up menus. See Menu Mouse Clicks.

See Menu Bar, for information on how to invoke commands with the menu bar.  See X Resources, for how to customize the menu bar menus' visual appearance.

Tool Bars
=========

The tool bar is a line (or lines) of icons at the top of the Emacs window, just below the menu bar.  You can click on these icons with the mouse to do various jobs.

The global tool bar contains general commands.  Some major modes define their own tool bars to replace it.  A few ``special'' modes that are not designed for ordinary editing remove some items from the global tool bar.

Tool bars work only on a graphical display.  The tool bar uses colored XPM icons if Emacs was built with XPM support.  Otherwise, the tool bar uses monochrome icons (PBM or XBM format).

You can turn display of tool bars on or off with M-x tool-bar-mode or by customizing the option tool-bar-mode.

When Emacs is compiled with GTK+ support, tool bars can have text and images. Customize tool-bar-style to select style.  The default style is the same as for the desktop in the Gnome case.  If no default is found, the tool bar uses just images.

You can also control the placement of the tool bar for the GTK+ tool bar with the frame parameter tool-bar-position. For a detailed description of frame parameters and customization, see Frame Parameters (The Emacs Lisp Reference Manual).

Using Dialog Boxes
==================

A dialog box is a special kind of menu for asking you a yes-or-no question or some other special question.  Many Emacs commands use a dialog box to ask a yes-or-no question, if you used the mouse to invoke the command that led to the question.

To disable the use of dialog boxes, change the variable use-dialog-box to nil.  In that case, Emacs always performs yes-or-no prompts using the echo area and keyboard input. This variable also controls whether to use file selection windows (but those are not supported on all platforms).

A file selection window is a special kind of dialog box for asking for file names.  You can customize the variable use-file-dialog to suppress the use of file selection windows, even if you still want other kinds of dialogs.  This variable has no effect if you have suppressed all dialog boxes with the variable use-dialog-box.

When Emacs is compiled with GTK+ support, it uses the GTK+ ``file chooser'' dialog.  Emacs adds an additional toggle button to this dialog, which you can use to enable or disable the display of hidden files (files starting with a dot) in that dialog.  If you want this toggle to be activated by default, change the variable x-gtk-show-hidden-files to t.  In addition, Emacs adds help text to the GTK+ file chooser dialog; to disable this help text, change the variable x-gtk-file-dialog-help-text to nil.

In GTK+ versions 2.4 through 2.10, you can choose to use an older version of the GTK+ file dialog by setting the variable x-gtk-use-old-file-dialog to a non-nil value.  If Emacs is built with a GTK+ version that has only one file dialog, this variable has no effect.

Tooltips
========

Tooltips are small windows that display text information at the current mouse position.  They activate when there is a pause in mouse movement.  There are two types of tooltip: help tooltips and GUD tooltips.

Help tooltips typically display over text---including the mode line---but are also available for other parts of the Emacs frame, such as the tool bar and menu items.

You can toggle display of help tooltips (Tooltip mode) with the command M-x tooltip-mode.  When Tooltip mode is disabled, the help text is displayed in the echo area instead.

GUD tooltips show values of variables.  They are useful when you are debugging a program.  See Debugger Operation.

The variables tooltip-delay specifies how long Emacs should wait before displaying a tooltip.  For additional customization options for displaying tooltips, use M-x customize-group RET tooltip RET.  See X Resources, for information on customizing the windows that display tooltips.

Mouse Avoidance
===============

On graphical terminals, the mouse pointer may obscure the text in the Emacs frame.  Emacs provides two methods to avoid this problem.

Firstly, Emacs hides the mouse pointer each time you type a self-inserting character, if the pointer lies inside an Emacs frame; moving the mouse pointer makes it visible again.  To disable this feature, set the variable make-pointer-invisible to nil.

Secondly, you can use Mouse Avoidance mode, a minor mode, to keep the mouse pointer away from point.  To use Mouse Avoidance mode, customize the variable mouse-avoidance-mode.  You can set this to various values to move the mouse in several ways:

banish
     Move the mouse to the upper-right corner on any key-press;

exile
     Move the mouse to the corner only if the cursor gets too close, and allow it to return once the cursor is out of the way;

jump
     If the cursor gets too close to the mouse, displace the mouse a random distance & direction;

animate
     As jump, but shows steps along the way for illusion of motion;

cat-and-mouse
     The same as animate;

proteus
     As animate, but changes the shape of the mouse pointer too.

You can also use the command M-x mouse-avoidance-mode to enable the mode.  Whenever Mouse Avoidance mode moves the mouse, it also raises the frame.

Non-Window Terminals
====================

On a text-only terminal, Emacs can display only one Emacs frame at a time.  However, you can still create multiple Emacs frames, and switch between them.  Switching frames on these terminals is much like switching between different window configurations.

Use C-x 5 2 to create a new frame and switch to it; use C-x 5 o to cycle through the existing frames; use C-x 5 0 to delete the current frame.

Each frame has a number to distinguish it.  If your terminal can display only one frame at a time, the selected frame's number N appears near the beginning of the mode line, in the form FN.

FN is in fact the frame's initial name.  You can give frames more meaningful names if you wish, and you can select a frame by its name.  Use the command M-x set-frame-name RET NAME RET to specify a new name for the selected frame, and use M-x select-frame-by-name RET NAME RET to select a frame according to its name.  The name you specify appears in the mode line when the frame is selected.

Using a Mouse in Terminal Emulators
===================================

Some text-only terminals support mouse clicks in the terminal window.

In a terminal emulator which is compatible with xterm, you can use M-x xterm-mouse-mode to give Emacs control over simple use of the mouse---basically, only non-modified single clicks are supported.  The normal xterm mouse functionality for such clicks is still available by holding down the SHIFT key when you press the mouse button.  Xterm Mouse mode is a global minor mode (see Minor Modes).  Repeating the command turns the mode off again.

In the console on GNU/Linux, you can use M-x gpm-mouse-mode to enable terminal mouse support.  You must have the gpm package installed and running on your system in order for this to work.