mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-05 22:20:24 -08:00
1542 lines
62 KiB
Text
1542 lines
62 KiB
Text
@c This is part of the Emacs manual.
|
||
@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2020 Free Software
|
||
@c Foundation, Inc.
|
||
@c See file emacs.texi for copying conditions.
|
||
@node Frames
|
||
@chapter Frames and Graphical Displays
|
||
@cindex frames
|
||
|
||
When Emacs is started on a graphical display, e.g., on the X Window
|
||
System, it occupies a graphical system-level display region. In this
|
||
manual, we call this a @dfn{frame}, reserving the word ``window'' for
|
||
the part of the frame used for displaying a buffer. A frame initially
|
||
contains one window, but it can be subdivided into multiple windows
|
||
(@pxref{Windows}). A frame normally also contains a menu bar, tool
|
||
bar, and echo area.
|
||
|
||
You can also create additional frames (@pxref{Creating Frames}).
|
||
All frames created in the same Emacs session have access to the same
|
||
underlying buffers and other data. For instance, if a buffer is being
|
||
shown in more than one frame, any changes made to it in one frame show
|
||
up immediately in the other frames too.
|
||
|
||
Typing @kbd{C-x C-c} closes all the frames on the current display,
|
||
and ends the Emacs session if it has no frames open on any other
|
||
displays (@pxref{Exiting}). To close just the selected frame, type
|
||
@kbd{C-x 5 0} (that is zero, not @kbd{o}).
|
||
|
||
This chapter describes Emacs features specific to graphical displays
|
||
(particularly mouse commands), and features for managing multiple
|
||
frames. On text terminals, many of these features are unavailable.
|
||
However, it is still possible to create multiple frames on text
|
||
terminals; such frames are displayed one at a time, filling the entire
|
||
terminal screen (@pxref{Non-Window Terminals}). It is also possible
|
||
to use the mouse on some text terminals (@pxref{Text-Only Mouse}, for
|
||
doing so on GNU and Unix systems; and
|
||
@iftex
|
||
@pxref{MS-DOS Mouse,,,emacs-xtra,Specialized Emacs Features},
|
||
@end iftex
|
||
@ifnottex
|
||
@pxref{MS-DOS Mouse},
|
||
@end ifnottex
|
||
for doing so on MS-DOS). Menus are supported on all text terminals.
|
||
|
||
@menu
|
||
* Mouse Commands:: Moving, cutting, and pasting, with the mouse.
|
||
* Word and Line Mouse:: Mouse commands for selecting whole words or lines.
|
||
* Mouse References:: Using the mouse to select an item from a list.
|
||
* Menu Mouse Clicks:: Mouse clicks that bring up menus.
|
||
* Mode Line Mouse:: Mouse clicks on the mode line.
|
||
* Creating Frames:: Creating additional Emacs frames with various contents.
|
||
* Frame Commands:: Iconifying, deleting, and switching frames.
|
||
* Fonts:: Changing the frame font.
|
||
* Speedbar:: How to make and use a speedbar frame.
|
||
* Multiple Displays:: How one Emacs instance can talk to several displays.
|
||
* Frame Parameters:: Changing the colors and other modes of frames.
|
||
* Scroll Bars:: How to enable and disable scroll bars; how to use them.
|
||
* Window Dividers:: Window separators that can be dragged with the mouse.
|
||
* Drag and Drop:: Using drag and drop to open files and insert text.
|
||
* Menu Bars:: Enabling and disabling the menu bar.
|
||
* Tool Bars:: Enabling and disabling the tool bar.
|
||
* Tab Bars:: Enabling and disabling the tab bar.
|
||
* Dialog Boxes:: Controlling use of dialog boxes.
|
||
* Tooltips:: Displaying information at the current mouse position.
|
||
* Mouse Avoidance:: Preventing the mouse pointer from obscuring text.
|
||
* Non-Window Terminals:: Multiple frames on terminals that show only one.
|
||
* Text-Only Mouse:: Using the mouse in text terminals.
|
||
@end menu
|
||
|
||
@node Mouse Commands
|
||
@section Mouse Commands for Editing
|
||
@cindex mouse buttons (what they do)
|
||
@cindex mouse, selecting text using
|
||
|
||
@kindex mouse-1
|
||
@kindex mouse-2
|
||
@kindex mouse-3
|
||
@table @kbd
|
||
@item mouse-1
|
||
Move point to where you click (@code{mouse-set-point}).
|
||
|
||
@item Drag-mouse-1
|
||
Activate the region around the text selected by dragging, and put the
|
||
text in the primary selection (@code{mouse-set-region}).
|
||
|
||
@item mouse-2
|
||
Move point to where you click, and insert the contents of the primary
|
||
selection there (@code{mouse-yank-primary}).
|
||
|
||
@item 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 (@code{mouse-save-then-kill}).
|
||
|
||
@item C-M-mouse-1
|
||
Activate a rectangular region around the text selected by dragging.
|
||
@xref{Rectangles}.
|
||
@end table
|
||
|
||
@findex mouse-set-point
|
||
The most basic mouse command is @code{mouse-set-point}, which is
|
||
invoked by clicking with the left mouse button, @kbd{mouse-1}, in the
|
||
text area of a window. This moves point to the position where you
|
||
clicked. If that window was not the selected window, it becomes the
|
||
selected window. You can also activate a region by double-clicking
|
||
@kbd{mouse-1} (@pxref{Word and Line Mouse}).
|
||
|
||
@vindex x-mouse-click-focus-ignore-position
|
||
Normally, if the frame you clicked in was not the selected frame, it
|
||
is made the selected frame, in addition to selecting the window and
|
||
setting the cursor. On the X Window System, you can change this by
|
||
setting the variable @code{x-mouse-click-focus-ignore-position} to
|
||
@code{t}. In that case, the initial click on an unselected frame just
|
||
selects the frame, without doing anything else; clicking again selects
|
||
the window and sets the cursor position.
|
||
|
||
@cindex mouse, dragging
|
||
@findex mouse-set-region
|
||
Holding down @kbd{mouse-1} and dragging the mouse over a stretch
|
||
of text activates the region around that text
|
||
(@code{mouse-set-region}), placing the mark where you started holding
|
||
down the mouse button, and point where you release it (@pxref{Mark}).
|
||
In addition, the text in the region becomes the primary selection
|
||
(@pxref{Primary Selection}).
|
||
|
||
@vindex mouse-drag-copy-region
|
||
If you change the variable @code{mouse-drag-copy-region} to a
|
||
non-@code{nil} value, dragging the mouse over a stretch of text also
|
||
adds the text to the kill ring. The default is @code{nil}.
|
||
|
||
@vindex mouse-scroll-min-lines
|
||
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
|
||
@code{mouse-scroll-min-lines} specifies a minimum step size.
|
||
|
||
@findex mouse-yank-primary
|
||
@findex mouse-yank-at-click
|
||
Clicking with the middle mouse button, @kbd{mouse-2}, moves point to
|
||
the position where you clicked and inserts the contents of the primary
|
||
selection (@code{mouse-yank-primary}). @xref{Primary Selection}.
|
||
This behavior is consistent with other X applications. Alternatively,
|
||
you can rebind @kbd{mouse-2} to @code{mouse-yank-at-click}, which
|
||
performs a yank at the position you click.
|
||
|
||
@vindex mouse-yank-at-point
|
||
If you change the variable @code{mouse-yank-at-point} to a
|
||
non-@code{nil} value, @kbd{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
|
||
@code{mouse-yank-primary} and @code{mouse-yank-at-click}.
|
||
|
||
@findex mouse-save-then-kill
|
||
Clicking with the right mouse button, @kbd{mouse-3}, runs the
|
||
command @code{mouse-save-then-kill}. This performs several actions
|
||
depending on where you click and the status of the region:
|
||
|
||
@itemize @bullet
|
||
@item
|
||
If no region is active, clicking @kbd{mouse-3} activates the region,
|
||
placing the mark where point was and point at the clicked position.
|
||
|
||
@item
|
||
If a region is active, clicking @kbd{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.
|
||
|
||
@item
|
||
If you originally specified the region using a double or triple
|
||
@kbd{mouse-1}, so that the region is defined to consist of entire
|
||
words or lines (@pxref{Word and Line Mouse}), then adjusting the
|
||
region with @kbd{mouse-3} also proceeds by entire words or lines.
|
||
|
||
@item
|
||
If you use @kbd{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 @kbd{mouse-1} at one end, then
|
||
click @kbd{mouse-3} twice at the other end. To copy the text into the
|
||
kill ring without deleting it from the buffer, press @kbd{mouse-3}
|
||
just once---or just drag across the text with @kbd{mouse-1}. Then you
|
||
can copy it elsewhere by yanking it.
|
||
@end itemize
|
||
|
||
The @code{mouse-save-then-kill} command also obeys the variable
|
||
@code{mouse-drag-copy-region} (described above). If the value is
|
||
non-@code{nil}, then whenever the command sets or adjusts the active
|
||
region, the text in the region is also added to the kill ring. If the
|
||
latest kill ring entry had been added the same way, that entry is
|
||
replaced rather than making a new entry.
|
||
|
||
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. @xref{Shift Selection}.
|
||
|
||
@cindex mouse wheel
|
||
@findex mouse-wheel-mode
|
||
@cindex Mouse Wheel minor mode
|
||
@cindex mode, Mouse Wheel
|
||
@vindex mouse-wheel-follow-mouse
|
||
@vindex mouse-wheel-scroll-amount
|
||
@vindex mouse-wheel-progressive-speed
|
||
Some mice have a ``wheel'' which can be used for scrolling. Emacs
|
||
supports scrolling windows with the mouse wheel, by default, on most
|
||
graphical displays. To toggle this feature, use @kbd{M-x
|
||
mouse-wheel-mode}. The variables @code{mouse-wheel-follow-mouse} and
|
||
@code{mouse-wheel-scroll-amount} determine where and by how much
|
||
buffers are scrolled. The variable
|
||
@code{mouse-wheel-progressive-speed} determines whether the scroll
|
||
speed is linked to how fast you move the wheel. This mode also
|
||
supports increasing or decreasing the height of the default face, by
|
||
default bound to scrolling with the @key{Ctrl} modifier.
|
||
|
||
@vindex mouse-wheel-tilt-scroll
|
||
@vindex mouse-wheel-flip-direction
|
||
Emacs can also support horizontal scrolling if your mouse's wheel can
|
||
be tilted. This feature is off by default; the variable
|
||
@code{mouse-wheel-tilt-scroll} turns it on. If you'd like to reverse
|
||
the direction of horizontal scrolling, customize the variable
|
||
@code{mouse-wheel-flip-direction} to a non-@code{nil} value.
|
||
|
||
When the mouse pointer is over an image, scrolling the mouse wheel
|
||
with the @key{Ctrl} modifier scales the image under the mouse pointer.
|
||
|
||
|
||
@node Word and Line Mouse
|
||
@section Mouse Commands for Words and Lines
|
||
|
||
These variants of @kbd{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.
|
||
|
||
@table @kbd
|
||
@item Double-mouse-1
|
||
Select the text around the word or character 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 single-quote or double-quote in C) selects the string
|
||
constant (Emacs uses heuristics to figure out whether that character
|
||
is the beginning or the end of it).
|
||
|
||
Double-clicking on the beginning of a parenthetical grouping or
|
||
beginning string-delimiter moves point to the end of the region,
|
||
scrolling the buffer display forward if necessary to show the new
|
||
location of point. Double-clicking on the end of a parenthetical
|
||
grouping or end string-delimiter keeps point at the end of the region
|
||
by default, so the beginning of the region will not be visible if it
|
||
is above the top of the window; setting the user option
|
||
@code{mouse-select-region-move-to-beginning} to non-@code{nil} changes
|
||
this to move point to the beginning of the region, scrolling the
|
||
display backward if necessary.
|
||
|
||
@item Double-Drag-mouse-1
|
||
Select the text you drag across, in units of whole words.
|
||
|
||
@item Triple-mouse-1
|
||
Select the line you click on.
|
||
|
||
@item Triple-Drag-mouse-1
|
||
Select the text you drag across, in units of whole lines.
|
||
@end table
|
||
|
||
@node Mouse References
|
||
@section Following References with the Mouse
|
||
@kindex mouse-1 @r{(on buttons)}
|
||
@kindex mouse-2 @r{(on buttons)}
|
||
@cindex hyperlinks
|
||
@cindex links
|
||
@cindex text buttons
|
||
@cindex buttons
|
||
|
||
@vindex mouse-highlight
|
||
Some Emacs buffers include @dfn{buttons}, or @dfn{hyperlinks}:
|
||
pieces of text that perform some action (e.g., following a reference)
|
||
when activated (e.g., by clicking on them). 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
|
||
@code{mouse-highlight} to @code{nil}, Emacs disables this
|
||
highlighting.
|
||
|
||
You can activate a button by moving point to it and typing
|
||
@key{RET}, or by clicking either @kbd{mouse-1} or @kbd{mouse-2} on the
|
||
button. For example, in a Dired buffer, each file name is a button;
|
||
activating it causes Emacs to visit that file (@pxref{Dired}). In a
|
||
@file{*Compilation*} buffer, each error message is a button, and
|
||
activating it visits the source code for that error
|
||
(@pxref{Compilation}).
|
||
|
||
Although clicking @kbd{mouse-1} on a button usually activates the
|
||
button, if you hold the mouse button down for a period of time before
|
||
releasing it (specifically, for more than 450 milliseconds), then
|
||
Emacs moves point where you clicked, without activating the button.
|
||
In this way, you can use the mouse to move point over a button without
|
||
activating it. Dragging the mouse over or onto a button has its usual
|
||
behavior of setting the region, and does not activate the button.
|
||
|
||
You can change how @kbd{mouse-1} applies to buttons by customizing
|
||
the variable @code{mouse-1-click-follows-link}. If the value is a
|
||
positive integer, that determines how long you need to hold the mouse
|
||
button down for, in milliseconds, to cancel button activation; the
|
||
default is 450, as described in the previous paragraph. If the value
|
||
is @code{nil}, @kbd{mouse-1} just sets point where you clicked, and
|
||
does not activate buttons. If the value is @code{double}, double
|
||
clicks activate buttons but single clicks just set point.
|
||
|
||
@vindex mouse-1-click-in-non-selected-windows
|
||
Normally, @kbd{mouse-1} on a button activates the button even if it
|
||
is in a non-selected window. If you change the variable
|
||
@code{mouse-1-click-in-non-selected-windows} to @code{nil},
|
||
@kbd{mouse-1} on a button in an unselected window moves point to the
|
||
clicked position and selects that window, without activating the
|
||
button.
|
||
|
||
@node Menu Mouse Clicks
|
||
@section Mouse Clicks for Menus
|
||
|
||
Several mouse clicks with the @key{Ctrl} and @key{SHIFT} modifiers
|
||
bring up menus.
|
||
|
||
@table @kbd
|
||
@item C-mouse-1
|
||
@kindex 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. @xref{Buffer Menus}.
|
||
|
||
@item C-mouse-2
|
||
@kindex C-mouse-2
|
||
This menu contains entries for examining faces and other text
|
||
properties, and well as for setting them (the latter is mainly useful
|
||
when editing enriched text; @pxref{Enriched Text}).
|
||
|
||
@item C-mouse-3
|
||
@kindex 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. 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.
|
||
|
||
@item S-mouse-1
|
||
This menu is for changing the default face within the window's buffer.
|
||
@xref{Text Scale}.
|
||
@end table
|
||
|
||
Some graphical applications use @kbd{mouse-3} for a mode-specific
|
||
menu. If you prefer @kbd{mouse-3} in Emacs to bring up such a menu
|
||
instead of running the @code{mouse-save-then-kill} command, rebind
|
||
@kbd{mouse-3} by adding the following line to your init file
|
||
(@pxref{Init Rebinding}):
|
||
|
||
@c FIXME: `mouse-popup-menubar-stuff' is obsolete since 23.1.
|
||
@smallexample
|
||
(global-set-key [mouse-3] 'mouse-popup-menubar-stuff)
|
||
@end smallexample
|
||
|
||
@node Mode Line Mouse
|
||
@section Mode Line Mouse Commands
|
||
@cindex mode line, mouse
|
||
@cindex mouse on mode line
|
||
|
||
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 (@pxref{Tooltips}). This
|
||
section's commands do not apply in those areas.
|
||
|
||
@table @kbd
|
||
@item mouse-1
|
||
@kindex mouse-1 @r{(mode line)}
|
||
@kbd{mouse-1} on a mode line selects the window it belongs to. By
|
||
dragging @kbd{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.
|
||
|
||
@item mouse-2
|
||
@kindex mouse-2 @r{(mode line)}
|
||
@kbd{mouse-2} on a mode line expands that window to fill its frame.
|
||
|
||
@item mouse-3
|
||
@kindex mouse-3 @r{(mode line)}
|
||
@kbd{mouse-3} on a mode line deletes the window it belongs to. If the
|
||
frame has only one window, it does nothing.
|
||
|
||
@item C-mouse-2
|
||
@kbd{C-mouse-2} on a mode line splits that window, producing two
|
||
side-by-side windows with the boundary running through the click
|
||
position (@pxref{Split Window}).
|
||
@end table
|
||
|
||
@kindex mouse-1 @r{(scroll bar)}
|
||
Furthermore, by clicking and dragging @kbd{mouse-1} on the divider
|
||
between two side-by-side mode lines, you can move the vertical
|
||
boundary to the left or right.
|
||
|
||
Note that resizing windows is affected by the value of
|
||
@code{window-resize-pixelwise}, see @ref{Split Window}.
|
||
|
||
@node Creating Frames
|
||
@section Creating Frames
|
||
@cindex creating frames
|
||
|
||
@kindex C-x 5
|
||
The prefix key @kbd{C-x 5} is analogous to @kbd{C-x 4}. Whereas
|
||
each @kbd{C-x 4} command pops up a buffer in a different window in the
|
||
selected frame (@pxref{Pop Up Window}), the @kbd{C-x 5} commands use a
|
||
different frame. If an existing visible or iconified (a.k.a.@:
|
||
``minimized'', @pxref{Visibility of Frames,,, elisp, The Emacs Lisp
|
||
Reference Manual}) frame already displays the requested buffer, that
|
||
frame is raised and deiconified (``un-minimized''); otherwise, a new
|
||
frame is created on the current display terminal.
|
||
|
||
The various @kbd{C-x 5} commands differ in how they find or create the
|
||
buffer to select:
|
||
|
||
@table @kbd
|
||
@item C-x 5 2
|
||
@kindex C-x 5 2
|
||
@findex make-frame-command
|
||
Create a new frame (@code{make-frame-command}).
|
||
@item C-x 5 b @var{bufname} @key{RET}
|
||
Select buffer @var{bufname} in another frame. This runs
|
||
@code{switch-to-buffer-other-frame}.
|
||
@item C-x 5 f @var{filename} @key{RET}
|
||
Visit file @var{filename} and select its buffer in another frame. This
|
||
runs @code{find-file-other-frame}. @xref{Visiting}.
|
||
@item C-x 5 d @var{directory} @key{RET}
|
||
Select a Dired buffer for directory @var{directory} in another frame.
|
||
This runs @code{dired-other-frame}. @xref{Dired}.
|
||
@item C-x 5 m
|
||
Start composing a mail message in another frame. This runs
|
||
@code{compose-mail-other-frame}. It is the other-frame variant of
|
||
@kbd{C-x m}. @xref{Sending Mail}.
|
||
@item C-x 5 .
|
||
Find the definition of an identifier in another frame. This runs
|
||
@code{xref-find-definitions-other-frame}, the multiple-frame variant
|
||
of @kbd{M-.}. @xref{Xref}.
|
||
@item C-x 5 r @var{filename} @key{RET}
|
||
@kindex C-x 5 r
|
||
@findex find-file-read-only-other-frame
|
||
Visit file @var{filename} read-only, and select its buffer in another
|
||
frame. This runs @code{find-file-read-only-other-frame}.
|
||
@xref{Visiting}.
|
||
@end table
|
||
|
||
You can control the appearance and behavior of the newly-created
|
||
frames by specifying @dfn{frame parameters}. @xref{Frame Parameters}.
|
||
|
||
@node Frame Commands
|
||
@section Frame Commands
|
||
|
||
The following commands are used to delete and operate on frames:
|
||
|
||
@table @kbd
|
||
@item C-x 5 0
|
||
@kindex C-x 5 0
|
||
@findex delete-frame
|
||
Delete the selected frame (@code{delete-frame}). This signals an
|
||
error if there is only one frame.
|
||
|
||
@item C-z
|
||
@kindex C-z @r{(X windows)}
|
||
Minimize (or iconify) the selected Emacs frame
|
||
(@code{suspend-frame}). @xref{Exiting}.
|
||
|
||
@item C-x 5 o
|
||
@kindex C-x 5 o
|
||
@findex other-frame
|
||
Select another frame, and raise it. If you repeat this command, it
|
||
cycles through all the frames on your terminal.
|
||
|
||
@item C-x 5 1
|
||
@kindex C-x 5 1
|
||
@findex delete-other-frames
|
||
Delete all frames on the current terminal, except the selected one.
|
||
|
||
@item M-@key{F10}
|
||
@kindex M-F10
|
||
@findex toggle-frame-maximized
|
||
Toggle the maximization state of the current frame. When a frame is
|
||
maximized, it fills the screen.
|
||
|
||
@item @key{F11}
|
||
@kindex F11
|
||
@findex toggle-frame-fullscreen
|
||
Toggle full-screen mode for the current frame. (The difference
|
||
between full-screen and maximized is normally that the former
|
||
hides window manager decorations, giving slightly more screen space to
|
||
Emacs itself.)
|
||
@end table
|
||
|
||
@vindex frame-resize-pixelwise
|
||
Note that with some window managers you may have to customize the
|
||
variable @code{frame-resize-pixelwise} to a non-@code{nil} value in
|
||
order to make a frame truly maximized or full-screen. This
|
||
variable, when set to a non-@code{nil} value, in general allows
|
||
resizing frames at pixel resolution, rather than in integral multiples
|
||
of lines and columns.
|
||
|
||
The @kbd{C-x 5 0} (@code{delete-frame}) command deletes the selected
|
||
frame. However, it will refuse to delete the last frame in an Emacs
|
||
session, to prevent you from losing the ability to interact with the
|
||
Emacs session. Note that when Emacs is run as a daemon (@pxref{Emacs
|
||
Server}), there is always a virtual frame that remains after all
|
||
the ordinary, interactive frames are deleted. In this case, @kbd{C-x
|
||
5 0} can delete the last interactive frame; you can use
|
||
@command{emacsclient} to reconnect to the Emacs session.
|
||
|
||
The @kbd{C-x 5 1} (@code{delete-other-frames}) command deletes all
|
||
other frames on the current terminal (this terminal refers to either a
|
||
graphical display, or a text terminal; @pxref{Non-Window Terminals}).
|
||
If the Emacs session has frames open on other graphical displays or
|
||
text terminals, those are not deleted.
|
||
|
||
@vindex focus-follows-mouse
|
||
The @kbd{C-x 5 o} (@code{other-frame}) command selects the next
|
||
frame on the current terminal. If you are using Emacs on the X Window
|
||
System with a window manager that selects (or @dfn{gives focus to})
|
||
whatever frame the mouse cursor is over, you have to change the
|
||
variable @code{focus-follows-mouse} to @code{t} in order for this
|
||
command to work properly. Then invoking @kbd{C-x 5 o} will also warp
|
||
the mouse cursor to the chosen frame.
|
||
|
||
@node Fonts
|
||
@section Fonts
|
||
@cindex fonts
|
||
|
||
By default, Emacs displays text on graphical displays using a
|
||
10-point monospace font, and the font size can be changed
|
||
interactively (@pxref{Text Scale}).
|
||
|
||
There are several different ways to specify a different font:
|
||
|
||
@itemize
|
||
@item
|
||
Click on @samp{Set Default Font} in the @samp{Options} menu. This
|
||
makes the selected font the default on all existing graphical frames.
|
||
To save this for future sessions, click on @samp{Save Options} in the
|
||
@samp{Options} menu.
|
||
|
||
@item
|
||
Add a line to your init file, modifying the variable
|
||
@code{default-frame-alist} to specify the @code{font} parameter
|
||
(@pxref{Frame Parameters}), like this:
|
||
|
||
@example
|
||
(add-to-list 'default-frame-alist
|
||
'(font . "DejaVu Sans Mono-10"))
|
||
@end example
|
||
|
||
@noindent
|
||
This makes the font the default on all graphical frames created after
|
||
restarting Emacs with that init file.
|
||
|
||
@cindex X defaults file
|
||
@cindex X resources file
|
||
@item
|
||
Add an @samp{emacs.font} X resource setting to your X resource file,
|
||
like this:
|
||
|
||
@example
|
||
emacs.font: DejaVu Sans Mono-12
|
||
@end example
|
||
|
||
@noindent
|
||
You must restart X, or use the @command{xrdb} command, for the X
|
||
resources file to take effect. @xref{Resources}. Do not quote
|
||
font names in X resource files.
|
||
|
||
@item
|
||
If you are running Emacs on the GNOME desktop, you can tell Emacs to
|
||
use the default system font by setting the variable
|
||
@code{font-use-system-font} to @code{t} (the default is @code{nil}).
|
||
For this to work, Emacs must have been compiled with support for
|
||
Gsettings (or the older Gconf).
|
||
|
||
@item
|
||
Use the command line option @samp{-fn} (or @samp{--font}). @xref{Font
|
||
X}.
|
||
@end itemize
|
||
|
||
To check what font you're currently using, the @kbd{C-u C-x =}
|
||
command can be helpful. It describes the character at point, and
|
||
names the font that it's rendered in.
|
||
|
||
@cindex fontconfig
|
||
There are four different ways to express a font name. The first is
|
||
to use a @dfn{Fontconfig pattern}. Fontconfig patterns have the
|
||
following form:
|
||
|
||
@example
|
||
@var{fontname}[-@var{fontsize}][:@var{name1}=@var{values1}][:@var{name2}=@var{values2}]...
|
||
@end example
|
||
|
||
@noindent
|
||
Within this format, any of the elements in brackets may be omitted.
|
||
Here, @var{fontname} is the @dfn{family name} of the font, such as
|
||
@samp{Monospace} or @samp{DejaVu Sans Mono}; @var{fontsize} is the
|
||
@dfn{point size} of the font (one @dfn{printer's point} is about 1/72
|
||
of an inch); and the @samp{@var{name}=@var{values}} entries specify
|
||
settings such as the slant and weight of the font. Each @var{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 @samp{@var{name}=} part may be
|
||
omitted.
|
||
|
||
Here is a list of common font properties:
|
||
|
||
@table @samp
|
||
@item slant
|
||
One of @samp{italic}, @samp{oblique}, or @samp{roman}.
|
||
|
||
@item weight
|
||
One of @samp{light}, @samp{medium}, @samp{demibold}, @samp{bold} or
|
||
@samp{black}.
|
||
|
||
@item style
|
||
Some fonts define special styles which are a combination of slant and
|
||
weight. For instance, @samp{Dejavu Sans} defines the @samp{book}
|
||
style, which overrides the slant and weight properties.
|
||
|
||
@item width
|
||
One of @samp{condensed}, @samp{normal}, or @samp{expanded}.
|
||
|
||
@item spacing
|
||
One of @samp{monospace}, @samp{proportional}, @samp{dual-width}, or
|
||
@samp{charcell}.
|
||
@end table
|
||
|
||
@noindent
|
||
Here are some examples of Fontconfig patterns:
|
||
|
||
@example
|
||
Monospace
|
||
Monospace-12
|
||
Monospace-12:bold
|
||
DejaVu Sans Mono:bold:italic
|
||
Monospace-12:weight=bold:slant=italic
|
||
@end example
|
||
|
||
For a more detailed description of Fontconfig patterns, see the
|
||
Fontconfig manual, which is distributed with Fontconfig and available
|
||
online at @url{https://fontconfig.org/fontconfig-user.html}.
|
||
|
||
On MS-Windows, only the subset of the form
|
||
@var{fontname}[-@var{fontsize}] is supported for all fonts; the full
|
||
Fontconfig pattern might not work for all of them.
|
||
|
||
@cindex GTK font pattern
|
||
The second way to specify a font is to use a @dfn{GTK font pattern}.
|
||
These have the syntax
|
||
|
||
@example
|
||
@var{fontname} [@var{properties}] [@var{fontsize}]
|
||
@end example
|
||
|
||
@noindent
|
||
where @var{fontname} is the family name, @var{properties} is a list of
|
||
property values separated by spaces, and @var{fontsize} is the point
|
||
size. The properties that you may specify for GTK font patterns are
|
||
as follows:
|
||
|
||
@itemize
|
||
@item
|
||
Slant properties: @samp{Italic} or @samp{Oblique}. If omitted, the
|
||
default (roman) slant is implied.
|
||
@item
|
||
Weight properties: @samp{Bold}, @samp{Book}, @samp{Light},
|
||
@samp{Medium}, @samp{Semi-bold}, or @samp{Ultra-light}. If omitted,
|
||
@samp{Medium} weight is implied.
|
||
@item
|
||
Width properties: @samp{Semi-Condensed} or @samp{Condensed}. If
|
||
omitted, a default width is used.
|
||
@end itemize
|
||
|
||
@noindent
|
||
Here are some examples of GTK font patterns:
|
||
|
||
@example
|
||
Monospace 12
|
||
Monospace Bold Italic 12
|
||
@end example
|
||
|
||
On MS-Windows, only the subset @var{fontname} is supported.
|
||
|
||
@cindex XLFD
|
||
@cindex X Logical Font Description
|
||
The third way to specify a font is to use an @dfn{XLFD} (@dfn{X
|
||
Logical Font Description}). This is the traditional method for
|
||
specifying fonts under X, and is also supported on MS-Windows. Each
|
||
XLFD consists of fourteen words or numbers, separated by dashes, like
|
||
this:
|
||
|
||
@example
|
||
-misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1
|
||
@end example
|
||
|
||
@noindent
|
||
A wildcard character (@samp{*}) in an XLFD matches any sequence of
|
||
characters (including none), and @samp{?} 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:
|
||
|
||
@example
|
||
-@var{maker}-@var{family}-@var{weight}-@var{slant}-@var{widthtype}-@var{style}@dots{}
|
||
@dots{}-@var{pixels}-@var{height}-@var{horiz}-@var{vert}-@var{spacing}-@var{width}-@var{registry}-@var{encoding}
|
||
@end example
|
||
|
||
@noindent
|
||
The entries have the following meanings:
|
||
|
||
@table @var
|
||
@item maker
|
||
The name of the font manufacturer.
|
||
@item family
|
||
The name of the font family (e.g., @samp{courier}).
|
||
@item weight
|
||
The font weight---normally either @samp{bold}, @samp{medium} or
|
||
@samp{light}. Some font names support other values.
|
||
@item slant
|
||
The font slant---normally @samp{r} (roman), @samp{i} (italic),
|
||
@samp{o} (oblique), @samp{ri} (reverse italic), or @samp{ot} (other).
|
||
Some font names support other values.
|
||
@item widthtype
|
||
The font width---normally @samp{normal}, @samp{condensed},
|
||
@samp{semicondensed}, or @samp{extended}. Some font names support
|
||
other values.
|
||
@item style
|
||
An optional additional style name. Usually it is empty---most XLFDs
|
||
have two hyphens in a row at this point. The style name can also
|
||
specify a two-letter ISO-639 language name, like @samp{ja} or
|
||
@samp{ko}; some fonts that support CJK scripts have that spelled out
|
||
in the style name part.
|
||
@item pixels
|
||
The font height, in pixels.
|
||
@item 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, @var{height} and @var{pixels} are proportional;
|
||
therefore, it is common to specify just one of them and use @samp{*}
|
||
for the other.
|
||
@item horiz
|
||
The horizontal resolution, in pixels per inch, of the screen for which
|
||
the font is intended.
|
||
@item 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 @samp{*} for this and @var{horiz}.
|
||
@item spacing
|
||
This is @samp{m} (monospace), @samp{p} (proportional) or @samp{c}
|
||
(character cell).
|
||
@item width
|
||
The average character width, in pixels, multiplied by ten.
|
||
@item registry
|
||
@itemx 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 @command{xfontsel} program to check which choices you
|
||
have. Normally you should use @samp{iso8859} for @var{registry} and
|
||
@samp{1} for @var{encoding}.
|
||
@end table
|
||
|
||
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, @samp{6x13} is
|
||
equivalent to
|
||
|
||
@example
|
||
-misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1
|
||
@end example
|
||
|
||
This form is not supported on MS-Windows.
|
||
|
||
@cindex client-side fonts
|
||
@cindex server-side fonts
|
||
On X, Emacs recognizes two types of fonts: @dfn{client-side} fonts,
|
||
which are provided by the Xft and Fontconfig libraries, and
|
||
@dfn{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.
|
||
|
||
@cindex listing system 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 @command{fc-list} command to list
|
||
the available fixed-width fonts, like this:
|
||
|
||
@example
|
||
fc-list :spacing=mono
|
||
fc-list :spacing=charcell
|
||
@end example
|
||
|
||
@noindent
|
||
For server-side X fonts, you can use the @command{xlsfonts} program to
|
||
list the available fixed-width fonts, like this:
|
||
|
||
@example
|
||
xlsfonts -fn '*x*' | grep -E '^[0-9]+x[0-9]+'
|
||
xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-m*'
|
||
xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-c*'
|
||
@end example
|
||
|
||
@noindent
|
||
Any font with @samp{m} or @samp{c} in the @var{spacing} field of the
|
||
XLFD is a fixed-width font. To see what a particular font looks like,
|
||
use the @command{xfd} command. For example:
|
||
|
||
@example
|
||
xfd -fn 6x13
|
||
@end example
|
||
|
||
@noindent
|
||
displays the entire font @samp{6x13}.
|
||
|
||
While running Emacs, you can also set the font of a specific kind of
|
||
text (@pxref{Faces}), or a particular frame (@pxref{Frame
|
||
Parameters}).
|
||
|
||
@node Speedbar
|
||
@section Speedbar Frames
|
||
@cindex speedbar
|
||
|
||
@cindex attached frame (of speedbar)
|
||
The @dfn{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 @dfn{attached
|
||
frame}; all speedbar operations act on that frame.
|
||
|
||
Type @kbd{M-x speedbar} to create the speedbar and associate it with
|
||
the current frame. To dismiss the speedbar, type @kbd{M-x speedbar}
|
||
again, or select the speedbar and type @kbd{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
|
||
@kbd{M-x speedbar} from that frame.
|
||
|
||
The speedbar can operate in various modes. Its default mode is
|
||
@dfn{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 non-directory visits that file in the selected window
|
||
of the attached frame, and clicking on a directory shows that
|
||
directory in the speedbar (@pxref{Mouse References}). Each line also
|
||
has a box, @samp{[+]} or @samp{<+>}, that you can click on to
|
||
@dfn{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 @samp{[+]} changes to
|
||
@samp{[-]}; you can click on that box to @dfn{contract} the item,
|
||
hiding its contents.
|
||
|
||
You navigate through the speedbar using the keyboard, too. Typing
|
||
@key{RET} while point is on a line in the speedbar is equivalent to
|
||
clicking the item on the current line, and @key{SPC} expands or
|
||
contracts the item. @kbd{U} displays the parent directory of the
|
||
current directory. To copy, delete, or rename the file on the current
|
||
line, type @kbd{C}, @kbd{D}, and @kbd{R} respectively. To create a
|
||
new directory, type @kbd{M}.
|
||
|
||
Another general-purpose speedbar mode is @dfn{Buffer Display} mode;
|
||
in this mode, the speedbar displays a list of Emacs buffers. To
|
||
switch to this mode, type @kbd{b} in the speedbar. To return to File
|
||
Display mode, type @kbd{f}. You can also change the display mode by
|
||
clicking @kbd{mouse-3} anywhere in the speedbar window (or
|
||
@kbd{mouse-1} on the mode-line) and selecting @samp{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 @samp{<M>} box.
|
||
|
||
For more details on using and programming the speedbar, @xref{Top,
|
||
Speedbar,,speedbar, Speedbar Manual}.
|
||
|
||
@node Multiple Displays
|
||
@section Multiple Displays
|
||
@cindex multiple displays
|
||
|
||
A single Emacs can talk to more than one X display. Initially, Emacs
|
||
uses just one display---the one specified with the @env{DISPLAY}
|
||
environment variable or with the @samp{--display} option (@pxref{Initial
|
||
Options}). To connect to another display, use the command
|
||
@code{make-frame-on-display}:
|
||
|
||
@findex make-frame-on-display
|
||
@table @kbd
|
||
@item M-x make-frame-on-display @key{RET} @var{display} @key{RET}
|
||
Create a new frame on display @var{display}.
|
||
@end table
|
||
|
||
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.
|
||
|
||
On multi-monitor displays it is possible to use the command
|
||
@code{make-frame-on-monitor}:
|
||
|
||
@findex make-frame-on-monitor
|
||
@table @kbd
|
||
@item M-x make-frame-on-monitor @key{RET} @var{monitor} @key{RET}
|
||
Create a new frame on monitor @var{monitor} whose screen area is
|
||
a part of the current display.
|
||
@end table
|
||
|
||
@node Frame Parameters
|
||
@section Frame Parameters
|
||
@vindex default-frame-alist
|
||
|
||
You can control the default appearance and behavior of all frames by
|
||
specifying a default list of @dfn{frame parameters} in the variable
|
||
@code{default-frame-alist}. Its value should be a list of entries,
|
||
each specifying a parameter name and a value for that parameter.
|
||
These entries take effect whenever Emacs creates a new frame,
|
||
including the initial frame.
|
||
|
||
@cindex frame size, specifying default
|
||
For example, you can add the following lines to your init file
|
||
(@pxref{Init File}) to set the default frame width to 90 character
|
||
columns, the default frame height to 40 character rows, and the
|
||
default font to @samp{Monospace-10}:
|
||
|
||
@example
|
||
(add-to-list 'default-frame-alist '(width . 90))
|
||
(add-to-list 'default-frame-alist '(height . 40))
|
||
(add-to-list 'default-frame-alist '(font . "Monospace-10"))
|
||
@end example
|
||
|
||
For a list of frame parameters and their effects, see @ref{Frame
|
||
Parameters,,, elisp, The Emacs Lisp Reference Manual}.
|
||
|
||
@vindex initial-frame-alist
|
||
You can also specify a list of frame parameters which apply to just
|
||
the initial frame, by customizing the variable
|
||
@code{initial-frame-alist}.
|
||
|
||
If Emacs is compiled to use an X toolkit, frame parameters that
|
||
specify colors and fonts don't affect menus and the menu bar, since
|
||
those are drawn by the toolkit and not directly by Emacs.
|
||
|
||
Frame appearance and behavior can also be customized through X
|
||
resources (@pxref{X Resources}); these override the parameters of the
|
||
initial frame specified in your init file.
|
||
|
||
Note that if you are using the desktop library to save and restore
|
||
your sessions, the frames to be restored are recorded in the desktop
|
||
file, together with their parameters. When these frames are restored,
|
||
the recorded parameters take precedence over the frame parameters
|
||
specified by @code{default-frame-alist} and @code{initial-frame-alist}
|
||
in your init file. @xref{Saving Emacs Sessions}, for how to avoid
|
||
that.
|
||
|
||
@node Scroll Bars
|
||
@section Scroll Bars
|
||
@cindex Scroll Bar mode
|
||
@cindex mode, Scroll Bar
|
||
@cindex Vertical Scroll Bar
|
||
|
||
On graphical displays, there is a @dfn{vertical scroll bar} on the
|
||
side of each Emacs window. Clicking @kbd{mouse-1} on the scroll bar's
|
||
up and down buttons scrolls the window by one line at a time (but some
|
||
toolkits allow you to customize the scroll bars to not have those
|
||
buttons). Clicking @kbd{mouse-1} above or below the scroll bar's
|
||
inner box scrolls the window by nearly the entire height of the
|
||
window, like @kbd{M-v} and @kbd{C-v} respectively (@pxref{Moving
|
||
Point}). (This, too, can behave differently with some toolkits.)
|
||
Dragging the inner box scrolls continuously.
|
||
|
||
If Emacs is compiled on the X Window System without X toolkit
|
||
support, the scroll bar behaves differently. Clicking @kbd{mouse-1}
|
||
anywhere on the scroll bar scrolls forward like @kbd{C-v}, while
|
||
@kbd{mouse-3} scrolls backward like @kbd{M-v}. Clicking @kbd{mouse-2}
|
||
in the scroll bar lets you drag the inner box up and down.
|
||
|
||
@findex scroll-bar-mode
|
||
@findex toggle-scroll-bar
|
||
To toggle the use of vertical scroll bars, type @kbd{M-x
|
||
scroll-bar-mode}. This command applies to all frames, including frames
|
||
yet to be created. To toggle vertical scroll bars for just the selected
|
||
frame, use the command @kbd{M-x toggle-scroll-bar}.
|
||
|
||
@vindex scroll-bar-mode
|
||
To control the use of vertical scroll bars at startup, customize the
|
||
variable @code{scroll-bar-mode} (@pxref{Customization}). Its value
|
||
should be either @code{right} (put scroll bars on the right side of
|
||
windows), @code{left} (put them on the left), or @code{nil} (disable
|
||
vertical scroll bars). By default, Emacs puts scroll bars on the
|
||
right if it was compiled with GTK+ support on the X Window System, and
|
||
on MS-Windows or macOS; Emacs puts scroll bars on the left if compiled
|
||
on the X Window System without GTK+ support (following the old
|
||
convention for X applications).
|
||
|
||
@vindex scroll-bar-width
|
||
@cindex width of the vertical scroll bar
|
||
You can also use the X resource @samp{verticalScrollBars} to enable
|
||
or disable the scroll bars (@pxref{Resources}). To control the scroll
|
||
bar width, change the @code{scroll-bar-width} frame parameter
|
||
(@pxref{Frame Parameters,,, elisp, The Emacs Lisp Reference Manual}).
|
||
|
||
@vindex scroll-bar-adjust-thumb-portion
|
||
@cindex overscrolling
|
||
If you're using Emacs on X (with GTK+ or Motif), you can customize the
|
||
variable @code{scroll-bar-adjust-thumb-portion} to control
|
||
@dfn{overscrolling} of the scroll bar, i.e., dragging the thumb down even
|
||
when the end of the buffer is visible. If its value is
|
||
non-@code{nil}, the scroll bar can be dragged downwards even if the
|
||
end of the buffer is shown; if @code{nil}, the thumb will be at the
|
||
bottom when the end of the buffer is shown. You cannot over-scroll
|
||
when the entire buffer is visible.
|
||
|
||
@cindex @code{scroll-bar} face
|
||
The visual appearance of the scroll bars is controlled by the
|
||
@code{scroll-bar} face. (Some toolkits, such as GTK+ and MS-Windows,
|
||
ignore this face; the scroll-bar appearance there can only be
|
||
customized system-wide, for GTK+ @pxref{GTK resources}).
|
||
|
||
@cindex vertical border
|
||
On graphical frames, vertical scroll bars implicitly serve to separate
|
||
side-by-side windows visually. When vertical scroll bars are disabled,
|
||
Emacs by default separates such windows with the help of a one-pixel
|
||
wide @dfn{vertical border}. That border occupies the first pixel column
|
||
of the window on the right and may thus overdraw the leftmost pixels of
|
||
any glyph displayed there. If these pixels convey important
|
||
information, you can make them visible by enabling window dividers, see
|
||
@ref{Window Dividers}. To replicate the look of vertical borders, set
|
||
the @code{right-divider-width} parameter of frames to one and have the
|
||
@code{window-divider} face inherit from that of @code{vertical-border},
|
||
@ref{Window Dividers,, Window Dividers, elisp, The Emacs Lisp Reference
|
||
Manual}.
|
||
|
||
@cindex Horizontal Scroll Bar
|
||
@cindex Horizontal Scroll Bar mode
|
||
On graphical displays with toolkit support, Emacs may also supply a
|
||
@dfn{horizontal scroll bar} on the bottom of each window. Clicking
|
||
@kbd{mouse-1} on that scroll bar's left and right buttons scrolls the
|
||
window horizontally by one column at a time. (Note that some toolkits
|
||
allow customizations of the scroll bar that cause these buttons not to
|
||
be shown.) Clicking @kbd{mouse-1} on the left or right of the scroll
|
||
bar's inner box scrolls the window by four columns. Dragging the
|
||
inner box scrolls the window continuously.
|
||
|
||
Note that such horizontal scrolling can make the window's position of
|
||
point disappear on the left or the right. Typing a character to insert
|
||
text or moving point with a keyboard command will usually bring it back
|
||
into view.
|
||
|
||
@findex horizontal-scroll-bar-mode
|
||
To toggle the use of horizontal scroll bars, type @kbd{M-x
|
||
horizontal-scroll-bar-mode}. This command applies to all frames,
|
||
including frames yet to be created. To toggle horizontal scroll bars
|
||
for just the selected frame, use the command @kbd{M-x
|
||
toggle-horizontal-scroll-bar}.
|
||
|
||
@vindex horizontal-scroll-bar-mode
|
||
To control the use of horizontal scroll bars at startup, customize the
|
||
variable @code{horizontal-scroll-bar-mode}.
|
||
|
||
@vindex scroll-bar-height
|
||
@cindex height of the horizontal scroll bar
|
||
You can also use the X resource @samp{horizontalScrollBars} to enable
|
||
or disable horizontal scroll bars (@pxref{Resources}). To control the
|
||
scroll bar height, change the @code{scroll-bar-height} frame parameter
|
||
(@pxref{Frame Parameters,,, elisp, The Emacs Lisp Reference Manual}).
|
||
|
||
@node Window Dividers
|
||
@section Window Dividers
|
||
@cindex Window Divider mode
|
||
@cindex mode, Window Divider
|
||
|
||
On graphical displays, you can use @dfn{window dividers} in order to
|
||
separate windows visually. Window dividers are bars that can be dragged
|
||
with the mouse, thus allowing you to easily resize adjacent windows.
|
||
|
||
@findex window-divider-mode
|
||
To toggle the display of window dividers, use the command @kbd{M-x
|
||
window-divider-mode}.
|
||
|
||
@vindex window-divider-default-places
|
||
To customize where dividers should appear, use the option
|
||
@code{window-divider-default-places}. Its value should be either
|
||
@code{bottom-only} (to show dividers only on the bottom of windows),
|
||
@code{right-only} (to show dividers only on the right of windows), or
|
||
@code{t} (to show them on the bottom and on the right).
|
||
|
||
@vindex window-divider-default-bottom-width
|
||
@vindex window-divider-default-right-width
|
||
To adjust the width of window dividers displayed by this mode
|
||
customize the options @code{window-divider-default-bottom-width} and
|
||
@code{window-divider-default-right-width}.
|
||
|
||
When vertical scroll bars are disabled, dividers can be also useful to
|
||
make the first pixel column of a window visible, which would be otherwise
|
||
covered by the vertical border used to separate side-by-side windows
|
||
(@pxref{Scroll Bars}).
|
||
|
||
For more details about window dividers see @ref{Window Dividers,,
|
||
Window Dividers, elisp, The Emacs Lisp Reference Manual}.
|
||
|
||
@node Drag and Drop
|
||
@section Drag and Drop
|
||
@cindex drag and drop
|
||
|
||
In most graphical desktop environments, Emacs has basic support for
|
||
@dfn{drag and drop} operations. 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.
|
||
|
||
@vindex dnd-open-file-other-window
|
||
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 @code{dnd-open-file-other-window}.
|
||
|
||
The XDND and Motif drag and drop protocols, and the old KDE 1.x
|
||
protocol, are currently supported.
|
||
|
||
@vindex mouse-drag-and-drop-region
|
||
Emacs can also optionally drag the region with the mouse into
|
||
another portion of this or another buffer. To enable that, customize
|
||
the variable @code{mouse-drag-and-drop-region} to a non-@code{nil}
|
||
value. Normally, the text is moved, i.e. cut and pasted, when the
|
||
destination is the same buffer as the origin; dropping the region on
|
||
another buffer copies the text instead. If the value of this variable
|
||
names a modifier key, such as @samp{shift}, @samp{control} or
|
||
@samp{alt}, then pressing that modifier key when dropping the text
|
||
will copy it instead of cutting it, even if you drop on the same
|
||
buffer as the one from which the text came.
|
||
|
||
@vindex mouse-drag-and-drop-region-cut-when-buffers-differ
|
||
@vindex mouse-drag-and-drop-region-show-tooltip
|
||
@vindex mouse-drag-and-drop-region-show-cursor
|
||
In order to cut text even when source and destination buffers differ,
|
||
set the option
|
||
@code{mouse-drag-and-drop-region-cut-when-buffers-differ} to a
|
||
non-@code{nil} value. By default, on a graphic display the selected
|
||
text is shown in a tooltip and point moves together with the mouse
|
||
cursor during dragging. To suppress such behavior, set the options
|
||
@code{mouse-drag-and-drop-region-show-tooltip} and/or
|
||
@code{mouse-drag-and-drop-region-show-cursor} to @code{nil}.
|
||
|
||
|
||
@node Menu Bars
|
||
@section Menu Bars
|
||
@cindex menu bar mode
|
||
@cindex mode, Menu Bar
|
||
@findex menu-bar-mode
|
||
@vindex menu-bar-mode
|
||
|
||
You can toggle the use of menu bars with @kbd{M-x menu-bar-mode}.
|
||
With no argument, this command toggles Menu Bar mode, a global minor
|
||
mode. With an argument, the command turns Menu Bar mode on if the
|
||
argument is positive, off if the argument is not positive. To control
|
||
the use of menu bars at startup, customize the variable
|
||
@code{menu-bar-mode}.
|
||
|
||
@kindex C-mouse-3 @r{(when menu bar is disabled)}
|
||
Expert users often turn off the menu bar, especially on text
|
||
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 @kbd{C-mouse-3} on a display which supports pop-up menus.
|
||
@xref{Menu Mouse Clicks}.
|
||
|
||
@xref{Menu Bar}, for information on how to invoke commands with the
|
||
menu bar. @xref{X Resources}, for how to customize the menu bar
|
||
menus' visual appearance.
|
||
|
||
@node Tool Bars
|
||
@section Tool Bars
|
||
@cindex tool bar mode
|
||
@cindex mode, Tool Bar
|
||
@cindex icons, toolbar
|
||
|
||
On graphical displays, Emacs puts a @dfn{tool bar} at the top of
|
||
each frame, just below the menu bar. This is a row of icons which you
|
||
can click on with the mouse to invoke various commands.
|
||
|
||
The global (default) tool bar contains general commands. Some major
|
||
modes define their own tool bars; whenever a buffer with such a major
|
||
mode is current, the mode's tool bar replaces the global tool bar.
|
||
|
||
@findex tool-bar-mode
|
||
@vindex tool-bar-mode
|
||
To toggle the use of tool bars, type @kbd{M-x tool-bar-mode}. This
|
||
command applies to all frames, including frames yet to be created. To
|
||
control the use of tool bars at startup, customize the variable
|
||
@code{tool-bar-mode}.
|
||
|
||
@vindex tool-bar-style
|
||
@cindex Tool Bar style
|
||
When Emacs is compiled with GTK+ support, each tool bar item can
|
||
consist of an image, or a text label, or both. By default, Emacs
|
||
follows the Gnome desktop's tool bar style setting; if none is
|
||
defined, it displays tool bar items as just images. To impose a
|
||
specific tool bar style, customize the variable @code{tool-bar-style}.
|
||
|
||
@cindex Tool Bar position
|
||
You can also control the placement of the tool bar for the GTK+ tool
|
||
bar with the frame parameter @code{tool-bar-position}. @xref{Frame
|
||
Parameters,,, elisp, The Emacs Lisp Reference Manual}.
|
||
|
||
NS builds consider the tool bar to be a window decoration, and
|
||
therefore do not display it when a window is undecorated. @xref{Frame
|
||
Parameters,,, elisp, The Emacs Lisp Reference Manual}. On macOS the
|
||
tool bar is hidden when the frame is put into fullscreen, but can be
|
||
displayed by moving the mouse pointer to the top of the screen.
|
||
|
||
@node Tab Bars
|
||
@section Tab Bars
|
||
@cindex tab bar mode
|
||
@cindex mode, Tab Bar
|
||
@cindex tabs, tabbar
|
||
|
||
On graphical displays and on text terminals, Emacs can optionally
|
||
display a @dfn{Tab Bar} at the top of each frame, just below the menu
|
||
bar. The Tab Bar is a row of @dfn{tabs}---buttons that you can click
|
||
to switch between window configurations on that frame.
|
||
|
||
Each tab on the Tab Bar represents a named persistent window
|
||
configuration. Its name is composed from the list of names of buffers
|
||
visible in windows of that window configuration. Clicking on the tab
|
||
switches to the window configuration recorded by the tab; it is a
|
||
configuration of windows and buffers which was previously used in the
|
||
frame when that tab was the current tab.
|
||
|
||
If you are using the desktop library to save and restore your
|
||
sessions (@pxref{Saving Emacs Sessions}), the tabs from the Tab Bar are
|
||
recorded in the desktop file, together with their associated window
|
||
configurations, and will be available after restoring the session.
|
||
|
||
@findex tab-bar-mode
|
||
To toggle the use of tab bars, type @kbd{M-x tab-bar-mode}. This
|
||
command applies to all frames, including frames yet to be created. To
|
||
control the use of tab bars at startup, customize the variable
|
||
@code{tab-bar-mode}.
|
||
|
||
@vindex tab-bar-show
|
||
The variable @code{tab-bar-show} controls whether the Tab Bar mode
|
||
is turned on automatically. If the value is @code{t}, then
|
||
@code{tab-bar-mode} is enabled when using the commands that create new
|
||
tabs. The value @code{1} hides the tab bar when it has only one tab,
|
||
and shows it again when more tabs are created. The value @code{nil}
|
||
always keeps the tab bar hidden; in this case it's still possible to
|
||
use persistent named window configurations without using the tab bar
|
||
by typing the related commands: @kbd{M-x tab-new}, @kbd{M-x tab-next},
|
||
@kbd{M-x tab-close}, @kbd{M-x tab-switcher}, etc.
|
||
|
||
@kindex C-x t
|
||
The prefix key @kbd{C-x t} is analogous to @kbd{C-x 5}.
|
||
Whereas each @kbd{C-x 5} command pops up a buffer in a different frame
|
||
(@pxref{Creating Frames}), the @kbd{C-x t} commands use a different
|
||
tab with a different window configuration in the selected frame.
|
||
|
||
The various @kbd{C-x t} commands differ in how they find or create the
|
||
buffer to select:
|
||
|
||
@table @kbd
|
||
@item C-x t 2
|
||
@kindex C-x t 2
|
||
@findex tab-new
|
||
Add a new tab (@code{tab-new}). You can control the choice of the
|
||
buffer displayed in a new tab by customizing the variable
|
||
@code{tab-bar-new-tab-choice}.
|
||
@item C-x t b @var{bufname} @key{RET}
|
||
Select buffer @var{bufname} in another tab. This runs
|
||
@code{switch-to-buffer-other-tab}.
|
||
@item C-x t f @var{filename} @key{RET}
|
||
Visit file @var{filename} and select its buffer in another tab. This
|
||
runs @code{find-file-other-tab}. @xref{Visiting}.
|
||
@item C-x t d @var{directory} @key{RET}
|
||
Select a Dired buffer for directory @var{directory} in another tab.
|
||
This runs @code{dired-other-tab}. @xref{Dired}.
|
||
@item C-x t r @var{tabname} @key{RET}
|
||
Renames the current tab to @var{tabname}. You can control the
|
||
programmatic name given to a tab by default by customizing the
|
||
variable @code{tab-bar-tab-name-function}.
|
||
@end table
|
||
|
||
@vindex tab-bar-new-tab-choice
|
||
By default, a new tab starts with the buffer that was
|
||
current before calling the command that adds a new tab.
|
||
To start a new tab with other buffers, customize the variable
|
||
@code{tab-bar-new-tab-choice}.
|
||
|
||
The following commands are used to delete and operate on tabs:
|
||
|
||
@table @kbd
|
||
@item C-x t 0
|
||
@kindex C-x t 0
|
||
@findex tab-close
|
||
Close the selected tab (@code{tab-close}). It has no effect if there
|
||
is only one tab.
|
||
|
||
@item C-x t o
|
||
@kindex C-x t o
|
||
@kindex C-TAB
|
||
@findex tab-next
|
||
Switch to another tab. If you repeat this command, it cycles through
|
||
all the tabs on the selected frame. With a positive numeric argument
|
||
N, it switches to the next Nth tab; with a negative argument −N, it
|
||
switches back to the previous Nth tab.
|
||
|
||
@item C-x t 1
|
||
@kindex C-x t 1
|
||
@findex tab-close-other
|
||
Close all tabs on the selected frame, except the selected one.
|
||
@end table
|
||
|
||
@node Dialog Boxes
|
||
@section Using Dialog Boxes
|
||
@cindex dialog boxes
|
||
|
||
@vindex use-dialog-box
|
||
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
|
||
@code{use-dialog-box} to @code{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).
|
||
|
||
@vindex use-file-dialog
|
||
@cindex file selection dialog, how to disable
|
||
A file selection window is a special kind of dialog box for asking
|
||
for file names. You can customize the variable @code{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 @code{use-dialog-box}.
|
||
|
||
@vindex x-gtk-show-hidden-files
|
||
@vindex x-gtk-file-dialog-help-text
|
||
@cindex hidden files, in GTK+ file chooser
|
||
@cindex help text, in GTK+ file chooser
|
||
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
|
||
@code{x-gtk-show-hidden-files} to @code{t}. In addition, Emacs adds
|
||
help text to the GTK+ file chooser dialog; to disable this help text,
|
||
change the variable @code{x-gtk-file-dialog-help-text} to @code{nil}.
|
||
|
||
@node Tooltips
|
||
@section Tooltips
|
||
@cindex tooltips
|
||
|
||
@dfn{Tooltips} are small special frames that display text
|
||
information at the current mouse position. They activate when there
|
||
is a pause in mouse movement over some significant piece of text in a
|
||
window, or the mode line, or some other part of the Emacs frame such
|
||
as a tool bar button or menu item.
|
||
|
||
@findex tooltip-mode
|
||
You can toggle the use of tooltips with the command @kbd{M-x
|
||
tooltip-mode}. When Tooltip mode is disabled, the help text is
|
||
displayed in the echo area instead. To control the use of tooltips at
|
||
startup, customize the variable @code{tooltip-mode}.
|
||
|
||
The following variables provide customization options for tooltip
|
||
display:
|
||
|
||
@vtable @code
|
||
@item tooltip-delay
|
||
This variable specifies how long Emacs should wait before displaying
|
||
the first tooltip. The value is in seconds.
|
||
|
||
@item tooltip-short-delay
|
||
This variable specifies how long Emacs should wait before displaying
|
||
subsequent tooltips on different items, having already displayed the
|
||
first tooltip. The value is in seconds.
|
||
|
||
@item tooltip-hide-delay
|
||
The number of seconds since displaying a tooltip to hide it, if the
|
||
mouse doesn't move.
|
||
|
||
@item tooltip-x-offset
|
||
@itemx tooltip-y-offset
|
||
The X and Y offsets, in pixels, of the left top corner of the tooltip
|
||
from the mouse pointer position. Note that these are ignored if
|
||
@code{tooltip-frame-parameters} was customized to include,
|
||
respectively, the @code{left} and @code{top} parameters. The values
|
||
of the offsets should be chosen so that the tooltip doesn't cover the
|
||
mouse pointer's hot spot, or it might interfere with clicking the
|
||
mouse.
|
||
|
||
@item tooltip-frame-parameters
|
||
The frame parameters used for displaying tooltips. @xref{Frame
|
||
Parameters,,, elisp, The Emacs Lisp Reference Manual}, and also
|
||
@ref{Tooltips,,, elisp, The Emacs Lisp Reference Manual}.
|
||
@end vtable
|
||
|
||
For additional customization options for displaying tooltips, use
|
||
@kbd{M-x customize-group @key{RET} tooltip @key{RET}}.
|
||
|
||
@vindex x-gtk-use-system-tooltips
|
||
If Emacs is built with GTK+ support, it displays tooltips via GTK+,
|
||
using the default appearance of GTK+ tooltips. To disable this,
|
||
change the variable @code{x-gtk-use-system-tooltips} to @code{nil}.
|
||
If you do this, or if Emacs is built without GTK+ support, most
|
||
attributes of the tooltip text are specified by the @code{tooltip}
|
||
face, and by X resources (@pxref{X Resources}).
|
||
|
||
@dfn{GUD tooltips} are special tooltips that show the values of
|
||
variables when debugging a program with GUD@. @xref{Debugger
|
||
Operation}.
|
||
|
||
@node Mouse Avoidance
|
||
@section Mouse Avoidance
|
||
@cindex avoiding mouse in the way of your typing
|
||
@cindex 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 @code{make-pointer-invisible} to @code{nil}.
|
||
@xref{Display Custom}.
|
||
|
||
@vindex mouse-avoidance-mode
|
||
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 @code{mouse-avoidance-mode}. You can set this
|
||
to various values to move the mouse in several ways:
|
||
|
||
@table @code
|
||
@item banish
|
||
Move the pointer to a corner of the frame on any key-press. You can
|
||
customize the variable @code{mouse-avoidance-banish-position} to
|
||
specify where the pointer goes when it is banished.
|
||
@item exile
|
||
Banish the pointer only if the cursor gets too close, and allow it to
|
||
return once the cursor is out of the way.
|
||
@item jump
|
||
If the cursor gets too close to the pointer, displace the pointer by a
|
||
random distance and direction.
|
||
@item animate
|
||
As @code{jump}, but shows steps along the way for illusion of motion.
|
||
@item cat-and-mouse
|
||
The same as @code{animate}.
|
||
@item proteus
|
||
As @code{animate}, but changes the shape of the mouse pointer too.
|
||
@end table
|
||
|
||
@findex mouse-avoidance-mode
|
||
You can also use the command @kbd{M-x mouse-avoidance-mode} to enable
|
||
the mode. Whenever Mouse Avoidance mode moves the mouse, it also
|
||
raises the frame.
|
||
|
||
@node Non-Window Terminals
|
||
@section Non-Window Terminals
|
||
@cindex text terminal
|
||
|
||
On a text 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 @kbd{C-x 5 2} to create a new frame and switch to it; use @kbd{C-x
|
||
5 o} to cycle through the existing frames; use @kbd{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 @var{n}
|
||
appears near the beginning of the mode line, in the form
|
||
@samp{F@var{n}}.
|
||
|
||
@findex set-frame-name
|
||
@findex select-frame-by-name
|
||
@samp{F@var{n}} 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 @kbd{M-x set-frame-name @key{RET}
|
||
@var{name} @key{RET}} to specify a new name for the selected frame,
|
||
and use @kbd{M-x select-frame-by-name @key{RET} @var{name} @key{RET}}
|
||
to select a frame according to its name. The name you specify appears
|
||
in the mode line when the frame is selected.
|
||
|
||
@node Text-Only Mouse
|
||
@section Using a Mouse in Text Terminals
|
||
@cindex mouse support
|
||
@cindex terminal emulators, mouse support
|
||
|
||
Some text terminals support mouse clicks in the terminal window.
|
||
|
||
@cindex xterm
|
||
In a terminal emulator which is compatible with @command{xterm}, you
|
||
can use @kbd{M-x xterm-mouse-mode} to give Emacs control over simple
|
||
uses of the mouse---basically, only non-modified single clicks are
|
||
supported. Newer versions of @command{xterm} also support
|
||
mouse-tracking. The normal @command{xterm} mouse functionality for
|
||
such clicks is still available by holding down the @key{SHIFT} key
|
||
when you press the mouse button. Xterm Mouse mode is a global minor
|
||
mode (@pxref{Minor Modes}). Repeating the command turns the mode off
|
||
again.
|
||
|
||
@findex gpm-mouse-mode
|
||
In the console on GNU/Linux, you can use @kbd{M-x gpm-mouse-mode} to
|
||
enable mouse support. You must have the gpm server installed and
|
||
running on your system in order for this to work. Note that when
|
||
this mode is enabled, you cannot use the mouse to transfer text
|
||
between Emacs and other programs which use GPM. This is due to
|
||
limitations in GPM and the Linux kernel.
|
||
|
||
@iftex
|
||
@xref{MS-DOS Mouse,,,emacs-xtra,Specialized Emacs Features},
|
||
@end iftex
|
||
@ifnottex
|
||
@xref{MS-DOS Mouse},
|
||
@end ifnottex
|
||
for information about mouse support on MS-DOS.
|