view doc/emacs/macos.texi @ 99945:a983ce7e3e6f

* macos.texi: Add Prev/Next/Top pointers to all nodes. (Mac Basics): Merge in Grabbing Environment Variables from earlier version. (Mac Customization): Rewrite Preferences Panel section and merge in to this node, add Open files by dragging to an Emacs window. * emacs.texi: Remove TOC reference to Mac Preferences Panel section.
author Adrian Robert <Adrian.B.Robert@gmail.com>
date Wed, 26 Nov 2008 05:27:11 +0000
parents 7ea6aba09239
children 81670f15d8b6
line wrap: on
line source

@c This is part of the Emacs manual.
@c Copyright (C) 2000, 2001, 2002, 2003, 2004,
@c   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
@c See file emacs.texi for copying conditions.
@node Mac OS, Microsoft Windows, Antinews, Top
@appendix Emacs and Mac OS
@cindex Mac OS
@cindex Macintosh

  This section briefly describes the peculiarities of using Emacs
under Mac OS X with native window system support.  For Mac OS X, Emacs
can be built either without window system support, with X11, or with
the Cocoa interface.  This section only applies to the Cocoa build.
Emacs 23 does not support Mac OS Classic.

  Emacs, when built on Mac OS X, uses the Cocoa application interface.
For various historical and technical reasons, Emacs uses the term
@samp{Nextstep} internally, instead of ``Cocoa'' or ``Mac OS X''; for
instance, most of the commands and variables described in the
following sections begin with @samp{ns-}, which is short for
@samp{Nextstep}.  NeXTstep was an application interface released by
NeXT Inc during the 1980s, of which Cocoa is a direct descendent.
Apart from Cocoa, there is another NeXTstep-style system: GNUstep,
which is free software.  As of this writing, the GNUstep support is
not fully functional, but we hope to improve it in the future.

@menu
* Mac Basics::          Basic Emacs usage in Mac OS.
* Mac Customization::   Customizations in Mac OS
* Mac Events::          How window system events are handled.
@end menu

@node Mac Basics, Mac Customization, , Mac OS
@section Basic Emacs usage in Mac OS

  By default, the @key{alt} and @key{option} keys are the same as
@key{Meta} when running under Mac OS.  The Mac @key{Cmd} key is the
same as @key{Super}, and Emacs provides a set of keybindings using
this modifier key that mimic other Mac applications (@pxref{Mac
Events}).  You can change these bindings in the usual way (@pxref{Key
Bindings}), or by using the Mac preferences panel (@pxref{Mac
Customization}).

  The standard Mac font and color panels are accessible via the
@samp{Windows} menu, or via the standard @key{Cmd-t} and @key{Cmd-C}
keybindings.  To use the color panel, drag from it to an Emacs frame
to change the foreground color of the face at that position (if the
@key{shift} key is held down, it changes the background color
instead).  To finalize the settings for either color or font, choose
@samp{Save Options} in the @samp{Options} menu.  To discard the
settings, create a new frame and close the altered one.

  In Mac OS, @key{S-Mouse-1} (i.e., clicking the left mouse button
while holding down the @key{Shift} key) adjusts the region to the
click position, just like @key{Mouse-3} (@code{mouse-save-then-kill});
it does not pop up a menu for changing the default face, as
@key{S-Mouse-1} normally does (@pxref{Temporary Face Changes}).  This
change makes Emacs behave more like other Mac applications.

  When you open or save files using the menus, or using the standard
@key{Cmd-o} and @key{Cmd-S} bindings, Emacs uses graphical file
dialogs to read file names.  However, if you use the regular Emacs key
sequences, such as @key{C-x C-f}, Emacs uses the minibuffer to read
file names.

  On GNUstep, in an X-windows environment you need to use @key{Cmd-c}
instead of one of the @key{C-w} or @key{M-w} commands to transfer text
to the X primary selection; otherwise, Emacs will use the
``clipboard'' selection.  Likewise, @key{Cmd-y} (instead of @key{C-y})
yanks from the X primary selection instead of the kill-ring or
clipboard.


@subsection Grabbing environment variables

Many programs which may run under Emacs like latex or man depend on the
settings of environment variables.  If Emacs is launched from the shell, it
will automatically inherit these environment variables and its subprocesses
will inherit them from it.  But if Emacs.app is launched from the Finder it
is not a descendant of any shell, so its environment variables haven't been
set which often causes the subprocesses it launches to behave differently than
they would when launched from the shell.

To solve this problem for Emacs.app, there are two solutions.  First is to
run, from the command line:

@example
.../Emacs.app/Contents/MacOS/bin/mac-fix-env
@end example

This will pick up your environment settings and save them into a special file
@file{~/.MacOSX/environment.plist}, which the desktop environment will use to
set the environment for all launched applications.  The drawback of this
method is it needs to be run again whenever something changes.

The other approach is to use the @code{ns-grabenv} command inside Emacs.  This
function will run a subshell and copy its environment variables into Emacs.

Adding this line to your @file{~/.emacs} will grab the csh environment
whenever emacs runs under a window system.

@lisp
(if window-system (ns-grabenv))
@end lisp

If you have a different shell you will have to give @code{ns-grabenv} some
arguments.  For zsh you would do this.

@lisp
(if window-system (ns-grabenv "/usr/bin/zsh"
                           "source /etc/zshenv"
                           "source ~/.zshenv"))
@end lisp

The reason that @code{ns-grabenv} is not done by default is that it adds up
to a second or two to the Emacs startup time.


@node Mac Customization, Mac Events, Mac Basics, Mac OS
@section Mac Customization

Emacs.app can be customized in several ways in addition to the standard
customization buffers and the Options menu.


@subsection Preferences Panel

The Preferences panel, much like the Options menu, is designed to allow quick
and convenient setting of commonly used options.

The Preferences panel is available for setting commonly used GUI-related
options for Emacs.app.  Access it under the Emacs menu (Mac) or Info menu
(GNUstep), or using @kbd{Cmd-,}.

Settings made here are saved when @samp{OK} is hit, or @samp{Save Options} is
selected from the Options menu.  These settings are stored into the NeXTstep
``defaults'' system under keys described below.

@itemize @bullet
@item
To set the default font used by Emacs click the @samp{Default Font...} button
to being up the Font Panel, then click on a frame.  The font of this frame
will then be changed when you make a selection in the Font Panel, and this
will be used as the default for future frames.  If you do not select a frame
first, the Font Panel will not work.

@item
The Color panel, brought up by the @samp{Colors...} button, allows setting of
foreground or background of any face.  Drag from the color bar to over the
emacs face you want to change.  This will change the foreground of that face,
or holding shift when dragging will change the background.

@item
@samp{Smooth Fonts} and @samp{Use Quickdraw} control text antialiasing.
Quickdraw is an older Mac technology still supported under OS X.

@item
The @samp{Expand Line Spacing} slider controls vertical spacing of text.  The
0.0 setting corresponds to the same height as other applications.  Settings
less than 0 compress the spacing, and greater than 0 expand it.  Emacs must be
restarted for the new setting to take effect.

@item
The @samp{Cursor Type} radio buttons select the cursor shape:
cursor:

@itemize
@item
Filled Box - the cursor is displayed as a box (default)
@item
Vertical Bar - the cursor is displayed as a vertical line
@item
Underscore - the cursor is displayed as a horizontal line
@item
Hollow - the cursor is displayed as a box with an outline but no fill
@end itemize

@item
The @samp{Cursor Blink Rate} slider to sets the frequency at which the cursor
blinks (CURRENTLY INOPERATIVE -- use @samp{customize group cursor} instead.)

@item
The @samp{Use System Highlight Color} option controls whether selected text is
highlighted with the system default or the local emacs setting.

@end itemize

The behavior of Modifier keys inside emacs can be controlled by the drop-down
menus in the @samp{Modifiers} section.  By default the Alt or Opt key is bound
to the Emacs 'Meta' key, and the Command key is bound to 'super' which allows
the Command key to function in a way similar to other NeXTstep/OS X
applications.


@subsection Font and Color Panels

The Font Panel may be accessed from the Windows menu or by @kbd{Cmd-t}.  It
will set the default font in the frame most recently used or clicked on.  To
make the setting permanent, use @samp{Save Options} in the Options menu, or
run @code{ns-save-preferences}.

You can bring up a color panel (with @key{Cmd-C} or from the Windows menu) and
drag the color you want over the emacs face you want to change.  Normal
dragging will alter the foreground color.  Shift dragging will alter the
background color.  To make the changes permanent select the "Save Options"
item in the "Options" menu, or run @code{ns-save-preferences}.  Useful in this
context is the listing of all faces obtained by @key{M-x}
@code{list-faces-display}.


@subsection Defaults

Under X, resources are used to customize the behavior of Emacs to the
needs of the user.  Nextstep defaults fulfill a similar function.  From
the command line, the command @samp{defaults read org.gnu.Emacs} shows
these resources as of the last Emacs exited, and individual resources
can be read or written by commands like @samp{defaults read Emacs Foo}
and @samp{defaults write Emacs Foo barvalue}.

  Calling the function @code{ns-save-preferences} in lisp, or
selecting the @samp{Option / Save Options} menu item, automatically
writes out the defaults corresponding to the selected window.

  In addition, you can set many of the following customizations by
setting @code{default-frame-alist} in your initialization file.

  Many of the preferences relating specifically to the Nextstep windowing
system (such as font rendering and the cursor type) can be set using the
Preferences panel.  It is important to note that when you hit @samp{OK} on
this panel, @emph{all} Nextstep settings are saved (including font and
colors).

This is a listing of some of the more useful defaults (and their
default values).  Several of these defaults accept the names of colors
as values.  For a list of all available colors pull up the color panel
and look at the color list called @samp{Emacs}.  Emacs also accepts
color specifications of the form @samp{ARGBaarrggbb} where @var{aa},
@var{rr}, @var{gg}, and @var{bb} are two hexadecimal digits describing
the alpha, red, green, and blue content of the color respectively.
@samp{HSBhhssbb}, @samp{CMYKccmmyykk} and @samp{GRAYgg} are the
equivalents in @samp{HSB}, @samp{CMYK} and gray scales.  (For HSB,
@samp{AHSBaahhssbb} is also accepted.)

@table @samp
@item InternalBorderWidth
Width in pixels of the internal border of the Nextstep frame.  This
acts to separate the text area of the window from the fringes,
scrollbars, and/or edges.

@example
defaults write Emacs InternalBorderWidth 2
@end example

@item VerticalScrollBars
@samp{YES} or @samp{NO} to enable or disable scroll bars, @samp{left} or
@samp{right} to explicitly set the side.

@example
defaults write Emacs VerticalScrollBars YES
@end example

@item Font
Name of the default font to be used for new frames (which can be
overridden by various faces).  If this font is not set, Emacs will use
the system wide fixed pitch font.  For most users the system fixed
pitch font will be @samp{Monaco} which doesn't have any bold or italic
versions.  (Italic will be synthesized.)

@item FontSize
Size of the font to be used for new frames.  If not set, Emacs will
use the default size of the system wide fixed pitch font.

@item Foreground
The default foreground (text) color for new frames.

@example
defaults write Emacs Foreground "Black"
@end example

@item Background
The default background color for new frames.

@example
defaults write Emacs Background "White"
@end example

@item Height
Height in rows of the default window.

@example
defaults write Emacs Height 48
@end example

@item Width
Width in columns of the default window.

@example
defaults write Emacs Width 80
@end example

@item CursorType
Name of the default cursor type for Emacs.  Allowed values are
@samp{box}, @samp{hollow}, @samp{underscore}, @samp{bar}, @samp{line} and @samp{no}.

@example
defaults write Emacs CursorType box
@end example

@item CursorColor
Name of the default cursor color for Emacs.  Of a particular use for
this setting is the @samp{Highlight} color.  When it is the cursor
color, Emacs will draw the cursor using the standard Nextstep
highlighting operator.

@example
defaults write Emacs CursorColor blue
@end example

@item Top
Distance in pixels from the top of the screen of the upper left corner
of the default window.

@example
defaults write Emacs Top 100
@end example

@item Left
Distance in pixels from the left edge of the screen to the upper left
corner of the default window.

@example
defaults write Emacs Left 100
@end example

@item HideOnAutoLaunch
@samp{YES} or @samp{NO} to determine whether Emacs will hide itself when
autolaunched from the dock.

@example
defaults write Emacs HideOnAutoLaunch NO
@end example

@item ExpandSpace
This lets you expand or shrink the line height used for displaying
text.  When this is set to 0.0, display should look like other
Nextstep applications.  If you set it higher than 0, Emacs will spread
the text lines apart, less than 0, compress them together.  (With
settings below zero parts of characters may be chopped off in certain
fonts.)  When using the Preferences panel, this is controlled by a
slider.  You must OK the panel and then restart Emacs for this default
to take effect.

When setting this using @code{"defaults write"}, you can either set a floating
point value, or @samp{YES}, which is equivalent 0.5, or @samp{NO}, which is
equivalent to 0.0.

@example
defaults write Emacs ExpandSpace -0.125
@end example

@item GSFontAntiAlias
This turns antialiasing on and off on.  Note that, on OS X, even if
antialiasing is on, Emacs will not antialias text of a size below the system
preference setting.

@example
defaults write Emacs GSFontAntiAlias NO
@end example

@item UseQuickdrawSmoothing
On OS X 10.3 and higher, this will render fonts using Quickdraw antialiasing,
which is less heavy than the Quartz antialiasing used by default.  Whether
this is on or off, the system font size threshold for antialiasing (see above)
is respected.

@example
defaults write Emacs UseQuickdrawSmoothing YES
@end example

@item AlternateModifier
This allows you to set the effect of the Alt or Opt key.  The default is
@samp{meta}, meaning to use as the Emacs 'meta' key.  You can also set this to
@samp{command}, @samp{hyper}, @samp{alt}, or @samp{none}.  The last is useful
for Continental users who normally use this key to enter accented and other
special characters.

@example
defaults write Emacs AlternateModifier "none"
@end example

@item CommandModifier
This allows you to set the effect of the Command key.  The default is
@samp{super}, which is used in a set of keybindings such as @code{s-o} for
``open file'' and @code{s-z} for ``undo'' that are similar to other NeXTstep
applications.  On the other hand, some people who use the Alt/Opt key for
accent entry like to set this to @samp{meta} so they still have easy access to
Emacs functionality bound to meta keys.  You can also set this, like Alt/Opt,
to @samp{hyper} or @samp{alt}, though there are no bindings to combinations
using these keys by default.  The @samp{none} option is not available for the
Command key.

@example
defaults write Emacs CommandModifier "meta"
@end example

@item fooFrame
Position and size to use for the frame named @var{foo} when it is
created.  The position and size have to be specified as a space
separated list: @samp{top}, @samp{left}, @samp{height} and
@samp{width}.  @samp{top} and @samp{left} are expressed in pixels,
@samp{height} is given in rows and @samp{width} is given in columns.
Named frames can be created by e.g. @code{(make-frame '((name
. "FOO")))}.

@example
defaults write Emacs TestFrame "100 200 30 70"
@end example

Another default previouly used by many Emacs users is this.

@example
defaults write Workspace DefaultOpenApp Emacs
@end example

It caused the NeXTstep Workspace to open files without a registered extension
in Emacs instead of as usual Edit.  For this default to work, Emacs needed to
be in the application search path of the Workspace (which usually includes
@file{~/Applications} and @file{~/Applications}).  If anyone knows the current
way to do this under OS X please contact the authors.

@end table

@subsection Open files by dragging to an Emacs window

The default behaviour when a user drags files from another application
into an Emacs frame is to insert the contents of all the dragged files
into the current buffer.  To remap the @code{ns-drag-file} event to
open the dragged files in the current frame use the following line:

@lisp
(define-key global-map [ns-drag-file] 'ns-find-file)
@end lisp


@node Mac Events, , Mac Customization, Mac OS
@section Windowing System Events in Mac OS X

  Nextstep applications receive a number of special events which have
no X equivalent.  These are sent as specially defined ``keys'', which
do not correspond to any sequence of keystrokes.  Under Emacs, these
``key'' events can be bound to functions just like ordinary
keystrokes.  Here is a list of these events.

@table @key
@item ns-open-file
@vindex ns-pop-up-frames
This event occurs when another Nextstep application requests that
Emacs open a file.  A typical reason for this would be a user
double-clicking a file in the Finder application.  By default, Emacs
responds to this event by opening a new frame and visiting the file in
that frame (@code{ns-find-file}), As an exception, if the selected
buffer is the @samp{*scratch*} buffer, Emacs visits the file in the
the selected frame.

You can change how Emacs responds to @key{ns-open-file} by changing
the variable @code{ns-pop-up-frames}.  Its default value,
@code{'fresh}, is what we have just described.  A value of @code{t}
means to always visit the file in a new frame.  A value of @code{nil}
means to always visit the file in an existing frame.

@item ns-open-temp-file
This event occurs when another application requests that Emacs open a
temporary file.  By default, this is handled by just generating a
@code{ns-open-file} event, the results of which are described above.

You can bind @key{ns-pop-up-frames} and @key{ns-open-temp-file} to
other Lisp functions.  When the event is registered, the name of the
file to open is stored in the variable @code{ns-input-file}.

@item ns-open-file-line
Some applications, such as ProjectBuilder and gdb, request not only a
particular file, but also a particular line or sequence of lines in
the file.  Emacs handles this by visiting that file and highlighting
the requested line (@code{ns-open-file-select-line}).

@item ns-drag-file
This event occurs when a user drags files from another application
into an Emacs frame.  The default behavior is to insert the contents
of all the dragged files into the current buffer
(@code{ns-insert-files}).  The list of dragged files is stored in the
variable @code{ns-input-file}.

@item ns-drag-color
This event occurs when a user drags a color from the color well (or
some other source) into an Emacs frame.  The default behavior is to
alter the foreground color of the area the color was dragged onto
(@code{ns-set-foreground-at-mouse}).  If this event is issued with a
@key{Shift} modifier, Emacs changes the background color instead
(@code{ns-set-background-at-mouse}).  The name of the dragged color is
stored in the variable @code{ns-input-color}.

@item ns-change-font
This event occurs when the user selects a font in a Nextstep font
panel (which can be opened with @kbd{Cmd-t}).  The default behavior is
to adjust the font of the selected frame
(@code{ns-respond-to-changefont}).  The name and size of the selected
font are stored in the variables @code{ns-input-font} and
@code{ns-input-fontsize} respectively.

@item ns-power-off
This event occurs when the user logs out and Emacs is still running.
The default behavior is to save all file-visiting buffers without
confirmation, and exit.
@end table

  Emacs also allows users to make use of Nextstep services, via a set
of commands whose names begin with @samp{ns-service-} and end with the
name of the service.  Type @kbd{M-x ns-service-@key{TAB}@key{TAB}} to
see a list of these commands.  These functions either operate on
marked text (replacing it with the result) or take a string argument
and return the result as a string.  You can also use the Lisp function
@code{ns-perform-service} to pass arbitrary strings to arbitrary
services and receive the results back.  Note that you may need to
restart Emacs to access newly-available services.

@ignore
   arch-tag: a822c2ab-4273-4997-927e-c153bb71dcf6
@end ignore