mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-06 20:00:46 -08:00
1024 lines
39 KiB
Text
1024 lines
39 KiB
Text
\input texinfo @c -*-texinfo-*-
|
|
|
|
@setfilename ../../info/ns-emacs
|
|
@settitle Emacs.app
|
|
|
|
@dircategory Emacs
|
|
@direntry
|
|
* NS-Emacs: (ns-emacs). Emacs.app for GNUstep and MacOS X.
|
|
@end direntry
|
|
|
|
@iftex
|
|
@finalout
|
|
@end iftex
|
|
|
|
@copying
|
|
This document describes Emacs.app for GNUstep and MacOS X.
|
|
|
|
Copyright @copyright{} 1994, 1997, 2005, 2006, 2007, 2008 Free Software
|
|
Foundation, Inc.
|
|
|
|
Copyright @copyright{} 2001 Christophe de Dinechin.
|
|
Copyright @copyright{} 1997 Christian Limpach.
|
|
|
|
@quotation
|
|
Permission is granted to copy, distribute and/or modify this document
|
|
under the terms of the GNU Free Documentation License, Version 1.2 or
|
|
any later version published by the Free Software Foundation; with no
|
|
Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
|
|
and with the Back-Cover Texts as in (a) below. A copy of the license
|
|
is included in the section entitled ``GNU Free Documentation License''.
|
|
|
|
(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
|
|
modify this GNU manual. Buying copies from the FSF supports it in
|
|
developing GNU and promoting software freedom.''
|
|
@end quotation
|
|
@end copying
|
|
|
|
|
|
@titlepage
|
|
@sp 10
|
|
@center @titlefont{Emacs.app}
|
|
|
|
@center (Version 9.0-rc3, November, 2007)
|
|
|
|
@sp 2
|
|
@center Carl Edman
|
|
@sp 2
|
|
@center Christian Limpach
|
|
@sp 2
|
|
@center Scott Bender
|
|
@sp 2
|
|
@center Christophe de Dinechin
|
|
@sp 2
|
|
@center Adrian Robert
|
|
@sp 2
|
|
|
|
@end titlepage
|
|
|
|
@ignore
|
|
@menu
|
|
* Introduction::
|
|
* Events::
|
|
* Preferences Panel::
|
|
* Preferences::
|
|
* Tips and Tricks::
|
|
* Thanks::
|
|
@end menu
|
|
@end ignore
|
|
|
|
@node Top, Introduction, (dir), (dir)
|
|
@top Emacs.app
|
|
|
|
Emacs.app for GNUstep and MacOS X (http://emacs-app.sf.net) is a version of
|
|
GNU Emacs which adds support for the GNUstep and MacOS X systems via the
|
|
OpenStep APIs (referred to as "Cocoa" under OS X). For support for
|
|
NeXTstep, OpenStep, and Rhapsody systems, try the older "Emacs-on-Aqua",
|
|
available at http://emacs-on-aqua.sf.net.
|
|
|
|
This port leaves most of the core functions of Emacs unchanged and is
|
|
fully-compatible with all Emacs Lisp packages, however it has a number of
|
|
step-ish features which do not have any equivalent in Emacs's X11 interface.
|
|
The design aim was to make it look as similar as possible to an X application
|
|
to Emacs Lisp programs and to make it look like a normal GNUstep or MacOS X
|
|
application to users.
|
|
|
|
(From here on out we refer to this port as "Emacs.app", and the systems
|
|
supported by this port as "NeXTstep", "NS", or "OpenStep", because saying
|
|
GNUstep / MacOS X is too clumsy. Both systems were derived from the NeXTstep
|
|
libraries developed by NeXT, Inc. for its NeXT computer and operating system,
|
|
whose APIs were later published as the OpenStep specification. All classes
|
|
and functions in these APIs start with the letters 'NS' for this historical
|
|
reason.)
|
|
|
|
Comments and bug reports relating to the window system interface are welcome.
|
|
To report a bug please use the @samp{Help/Report Emacs.app bug...} menu item.
|
|
This sends messages to the maintainer. (Note, please include your email
|
|
address if you don't usually send email from this machine.)
|
|
|
|
Problems and bugs which do not relate to the NS support (i.e. which can be
|
|
reproduced even in a dumb terminal or under the Carbon port or X11) should be
|
|
reported through the normal Emacs channels.
|
|
|
|
Also, please inspect the ``Known Issues'' contained in the README file you may
|
|
have received with this distribution or listed at the web site
|
|
http://emacs-app.sf.net .
|
|
|
|
There is also a developer mailing list for Emacs.app,
|
|
<emacs-app-dev-@@lists.sourceforge.net>. Sign up through the project page at
|
|
http://emacs-app.sf.net. A user mailing list will be added in time and if
|
|
warranted.
|
|
|
|
|
|
@menu
|
|
* Introduction:: What you need to know to use and program.
|
|
* Events:: How NS window system events are handled.
|
|
* Preferences Panel:: Using the Preferences Panel to customize Emacs.
|
|
* Customization:: Customization for Emacs.app.
|
|
* Tips and Tricks:: Collected hints from Emacs users
|
|
* Thanks:: The people who helped create Emacs.app
|
|
@end menu
|
|
|
|
@node Introduction, Events, Top, Top
|
|
@section Introduction
|
|
|
|
Despite the size and complexity of GNU Emacs, NeXTstep and the NeXTstep
|
|
support code, this manual can be kept mercifully short by saying that
|
|
everything written in the Emacs and the Emacs Lisp manuals about GNU Emacs
|
|
applies equally to this Emacs except as noted here.
|
|
|
|
@itemize @bullet
|
|
@item
|
|
The ``right-click'' button (usually the right-hand button on a two-button
|
|
mouse) is mapped to Mouse-3, instead of Mouse-2 as earlier versions of
|
|
Emacs.app. This is for compatibility with X versions of emacs. To get some
|
|
of the old behavior back, you can put in your .emacs:
|
|
|
|
@lisp
|
|
(global-set-key [mouse-3] 'mouse-yank-at-click)
|
|
@end lisp
|
|
|
|
The other functionality of mouse-3 in a buffer of extending a selection is
|
|
available via shift-click as in other NS applications. To pop up a context
|
|
menu,
|
|
|
|
@item
|
|
The Alt or Opt key is bound to the traditional emacs "meta" by default, while
|
|
the NS "command" key is bound to 'super', for which a set of keybindings are
|
|
set to mimic other NeXTstep applications. (See @ref{Events}.) You can change
|
|
either of these bindings using the preferences panel (see @ref{Preferences
|
|
Panel}).
|
|
|
|
@item
|
|
The standard NeXTstep font and color panels are accessible through the Windows
|
|
menu, or through the standard Cmd-t and Cmd-C. These are easier to use than
|
|
Emacs's own methods for setting these items. To use the color panel, drag
|
|
from it to an emacs frame. The foreground (or background, if shift is held
|
|
down) of the face at that point will be changed. To finalize settings for
|
|
either color or font, choose 'Save Options' from under the Options menu. To
|
|
discard these settings, create a new frame and close the altered one.
|
|
|
|
@item
|
|
Opening files / directories and 'Save Buffer As' operated from the menus use
|
|
the standard NS file panels. Likewise if you use Cmd-o or Cmd-S. However,
|
|
if you use the regular Emacs key combinations Ctrl-x,Ctrl-f and Ctrl-x,w for
|
|
these functions, the normal Emacs mode of typing filenames into the minibuffer
|
|
is used.
|
|
|
|
@item
|
|
On GNUstep, in an X-windows environment you need to use Cmd-c instead of one
|
|
of the Ctrl-w or Meta-w commands to transfer text to the X primary selection.
|
|
(Ordinarily the "clipboard" selection is used, for compatibility with more
|
|
modern Gnome and KDE programs.) Likewise, Cmd-y (instead of Ctrl-y) will
|
|
yank/paste in the X primary selection instead of the kill-ring / clipboard.
|
|
|
|
@item
|
|
The @code{window-system} variable can now have the value @code{ns} in addition
|
|
to, e.g., @code{x} or @code{nil}. You can use this in your .emacs file:
|
|
|
|
If you just want to distinguish between cases in which there is a
|
|
window system and in which there isn't, this construct is useful.
|
|
@lisp
|
|
(if window-system
|
|
... ;;; evaluate if any window system is running
|
|
...) ;;; evaluate only when running on a dumb terminal
|
|
@end lisp
|
|
|
|
For more detailed control, use this.
|
|
@lisp
|
|
(cond
|
|
((eq window-system 'ns) ;;; NS specific instructions
|
|
...)
|
|
((eq window-system 'x) ;;; X specific instructions
|
|
...)
|
|
(t ;;; Instructions for dumb terminal or other window systems
|
|
...))
|
|
@end lisp
|
|
|
|
@item
|
|
Likewise, you can detect whether you are running in emacs-23 or an earlier
|
|
version with:
|
|
|
|
@lisp
|
|
(if (eq emacs-major-version '23) <emacs-23 code> <emacs-22- code>)
|
|
@end lisp
|
|
|
|
@item
|
|
Most NS specific functions begin with 'ns-'. Do "C-h f ns-[TAB]" to list
|
|
these. Many of these replace equivalent 'x-' functions, while others perform
|
|
uniquely NS things, such as Service invocation.
|
|
|
|
@item
|
|
There are also NS variables beginning with 'ns-', however in most cases users
|
|
need not pay attention to them since the customizability they provide is also
|
|
available through the defaults system and preferences panel (see
|
|
@ref{Preferences Panel} and @ref{Customization}).
|
|
|
|
@item
|
|
When Emacs is called by a name which ends in @file{-nw} it will always
|
|
start in terminal mode. For example, a user who needs a terminal only
|
|
emacs would create a symbolic link from @file{emacs} to @file{emacs-nw}.
|
|
When he launches @file{emacs-nw} from the command line, the window
|
|
system will never be involved. (Note, as of rc2, terminal mode is still not
|
|
working under OS X.)
|
|
@end itemize
|
|
|
|
@node Events, Preferences Panel, Introduction, Top
|
|
@section Events
|
|
|
|
Under Emacs.app the NeXTstep command key works as the @dfn{super} modifier
|
|
key. In principle users can bind their command keys to whatever function they
|
|
want, but to make the transition for NS users easier the default NS startup
|
|
files bind the most commonly used NS command keys to work just like they do in
|
|
most other NS applications. Some are shown in the menus. Choose "List
|
|
Keybindings" from the Help menu and scroll down to the keys labeled starting
|
|
with 's-' to see all of them.
|
|
|
|
NS applications receive a number of special events which have no X equivalent.
|
|
These are sent as specially defined ``keys'' (which don't correspond to any
|
|
keyboard stroke combination). Under Emacs these ``key'' events can be bound
|
|
to functions just like ordinary keystrokes. Here is a list of these events.
|
|
|
|
@table @code
|
|
@item ns-open-file
|
|
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. When this event is registered the
|
|
name of the file to open is found in the variable @code{ns-input-file}.
|
|
|
|
The behaviour of the default binding is controlled by the variable
|
|
@code{ns-pop-up-frames}. It's default value @code{'fresh} causes Emacs
|
|
to open the new file in the selected frame if the selected buffer is a
|
|
scratch buffer. Otherwise Emacs opens a new frame and displays the file
|
|
in that.
|
|
|
|
To always get a new frame one would change @code{ns-pop-up-frames} to
|
|
@code{t}. To get the opposite behaviour (i.e. always putting the file into
|
|
the selected frame), change @code{ns-pop-up-frames} to @code{nil}.
|
|
|
|
@item ns-open-temp-file
|
|
This event occurs when another application requests that Emacs open a
|
|
temporary file. The file name is again in @code{ns-input-file}. By
|
|
default this is handled by just generating a @code{ns-open-file} event
|
|
(which then causes the @code{ns-open-file} function to be called
|
|
whatever that may be).
|
|
|
|
@lisp
|
|
(define-key global-map [ns-open-temp-file] [ns-open-file])
|
|
@end lisp
|
|
|
|
@item ns-open-file-line
|
|
Some applications (like e.g. ProjectBuilder or gdb) request not only a
|
|
particular file, but also a particular line or sequence of lines in the
|
|
file. The file name is in @code{ns-input-file}, and
|
|
@code{ns-input-line} is either the line or a cons cell the car of which
|
|
contains the beginning line and the cdr of which the ending line.
|
|
|
|
@lisp
|
|
(define-key global-map [ns-open-file-line] 'ns-open-file-select-line)
|
|
@end lisp
|
|
|
|
@item ns-drag-file
|
|
When a user drags files from another application into an Emacs frame
|
|
this event is triggered. Here @code{ns-input-file} is a list of all
|
|
dragged files. The default binding inserts all the dragged files into
|
|
the current buffer.
|
|
|
|
@lisp
|
|
(define-key global-map [ns-drag-file] 'ns-insert-files)
|
|
@end lisp
|
|
|
|
@item ns-drag-color
|
|
When a user drags a color from the color well (or some other source)
|
|
Emacs sees this event and @code{ns-input-color} contains the name of the
|
|
dragged color. The default bindings alter the foreground color of the
|
|
area the color was dragged onto (or background color if the color was
|
|
shift dragged).
|
|
|
|
@lisp
|
|
(define-key global-map [ns-drag-color]
|
|
'ns-set-foreground-at-mouse)
|
|
(define-key global-map [S-ns-drag-color]
|
|
'ns-set-background-at-mouse)
|
|
@end lisp
|
|
|
|
@item ns-change-font
|
|
Emacs.app allows the user to open a standard NS font panel (by default that
|
|
function is bound to @kbd{Cmd-t}). When the user selects a font in that
|
|
panel this event occurs. @code{ns-input-font} will contain the name of
|
|
the selected font and @code{ns-input-fontsize} is its size. The
|
|
default binding causes Emacs to adjust the font of the selected frame.
|
|
|
|
@lisp
|
|
(define-key global-map [ns-change-font] 'ns-respond-to-changefont)
|
|
@end lisp
|
|
|
|
@item ns-power-off
|
|
Finally when the user logs out and Emacs is still running it receives
|
|
this event so that it has a chance to save its files before it dies.
|
|
|
|
@lisp
|
|
(define-key global-map [ns-power-off]
|
|
'(lambda () (interactive) (save-buffers-kill-emacs t)))
|
|
@end lisp
|
|
|
|
@end table
|
|
|
|
Emacs.app also allows users to make use of NeXTstep services programatically,
|
|
in addition to via the Services menu. On the most basic level programmers can
|
|
use the @code{ns-perform-service} to pass arbitrary strings to arbitrary
|
|
services and receive the results back. However convenience functions are
|
|
automatically provided for all services so there should be no need to use
|
|
this. These function names begin with 'ns-service-', and they will either
|
|
operate on marked text (replacing it with the result) or take a string
|
|
argument and return the result as a string. Type "M-x ns-service-[TAB][TAB]"
|
|
to see those currently defined. Note that Emacs may require a restart to
|
|
access newly available services.
|
|
|
|
|
|
@node Preferences Panel, Customization, Events, Top
|
|
@section Preferences Panel
|
|
|
|
The Preferences Panel can be used to set or change some of the settings for
|
|
Emacs such as the text appearance, cursor settings, and key bindings.
|
|
|
|
To save any settings changed through the Preferences Panel, hit OK;
|
|
this has the same effect as if you had explicitly chosen Help > Save
|
|
Preferences.
|
|
|
|
To restore Emacs to use its default settings click Reset to Defaults from
|
|
the Preferences Panel.
|
|
|
|
Additional GNUstep/OS X preferences may be set from the command line using
|
|
the @command{defaults} command. (See @ref{Customization}.)
|
|
|
|
|
|
@section Text Rendering Preferences
|
|
|
|
Font and color settings can be set using the standard NeXTstep font
|
|
and color panels.
|
|
|
|
@itemize @bullet
|
|
@item
|
|
To set the default font used by Emacs click the Default Font... button
|
|
to launch the Font Panel. Click on a frame before selecting the font
|
|
family, typeface, and size of the default font from the Font Panel.
|
|
|
|
Note that the default font will not be changed if a frame hasn't been
|
|
selected first.
|
|
|
|
@item
|
|
To set the default foreground or background color click the
|
|
Colors... button to launch the Color Panel. Choose the color you want
|
|
using any of the color models (color wheel, sliders, palette, image,
|
|
or crayons) available from the Colors toolbar. To apply the color
|
|
drag a swatch from the color bar at the top of the panel to text on
|
|
an Emacs frame. Holding down shift will change the background color
|
|
instead of the foreground.
|
|
|
|
@item
|
|
To use antialiased text check the Smooth Fonts option. Lighter font
|
|
smoothing can be achieved by checking the Use Quickdraw (lighter)
|
|
smoothing option.
|
|
|
|
@item
|
|
To change the line height that text is displayed at drag the Expand
|
|
Line Spacing slider. When the slider is set to 0.0 Emacs will use the
|
|
same line height as other Mac OS X applications. To increase the line
|
|
height (and decrease the number of lines that can be displayed on the
|
|
screen) drag the slider towards 1.0. To decrease the line height
|
|
(increases the number of lines that can be displayed) drag the slider
|
|
towards -1.0.
|
|
|
|
After the line spacing setting has been changed Emacs must be restarted
|
|
to take account of the change.
|
|
|
|
@end itemize
|
|
|
|
@section Display Preferences
|
|
|
|
The Display Preferences can be used to change the appearance of the
|
|
default cursor used by Emacs.
|
|
|
|
@itemize @bullet
|
|
@item
|
|
The Cursor Type radio buttons can be used to select the style used for the cursor:
|
|
|
|
@itemize
|
|
@item
|
|
Box - the cursor is displayed as a box
|
|
@item
|
|
Underscore - the cursor is displayed as a horizontal bar
|
|
@item
|
|
Bar - the cursor is displayed as a vertical bar
|
|
@item
|
|
Hollow - the cursor is displayed as a box with an outline but no fill
|
|
@end itemize
|
|
|
|
@item
|
|
Use the Cursor Blink Rate slider to set the frequency at which the cursor blinks.
|
|
|
|
@item
|
|
Check the Use System Highlight Color option to use the system default
|
|
color for highlighted text.
|
|
|
|
@end itemize
|
|
|
|
@section Modifier Interpretation Preferences
|
|
|
|
The Modifier Preferences can be used to change the behaviour of the
|
|
Alt/Opt and Command keys. 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.
|
|
|
|
@itemize @bullet
|
|
@item
|
|
To re-bind the Alt or Opt key select a keybinding from the Alt/Opt Key
|
|
combo box.
|
|
@item
|
|
To re-bind the Command key select a keybinding from the Command Key
|
|
combo box.
|
|
@end itemize
|
|
|
|
|
|
@node Customization, Tips and Tricks, Preferences Panel, Top
|
|
@section Customization
|
|
|
|
Under X, resources are used to customize the behavior of Emacs to the
|
|
needs of the user. These resources are queried programmatically with
|
|
the @code{x-get-resource} function. Under NS defaults fulfill a
|
|
similar function. They can be read using the @code{ns-get-resource}
|
|
function. Calls to @code{x-get-resource} are automatically mapped to
|
|
@code{ns-get-resource}. From the command line, the command
|
|
`@code{defaults read org.gnu.Emacs}' will show these resources as of
|
|
last Emacs quit, and individual resources can be read/written by
|
|
commands like `@code{defaults read Emacs Foo}' and `@code{defaults
|
|
write Emacs Foo barvalue}'.
|
|
|
|
Calling the function @code{ns-save-preferences} in lisp, or selecting ``Save
|
|
Options'' from the 'Options' menu will automatically write out the defaults
|
|
corresponding to the selected window.
|
|
|
|
In addition, it is also possible to set many of the following customizations
|
|
by setting the @code{default-frame-alist} in the @file{~/.emacs} file.
|
|
|
|
Many of the preferences relating specifically to the NS windowing system (font
|
|
rendering, cursor type, etc.) can be set using a @ref{Preferences Panel}
|
|
accessed in the standard fashion from the menubar or Cmd-,. It is important
|
|
to note that when you hit 'OK' on this panel, @emph{all} NS settings are saved
|
|
(including font and colors) just as if you had called
|
|
@code{ns-save-preferences}.
|
|
|
|
Note that if you use the 'Default Font' button on the Preferences panel, you
|
|
must click on a frame before selecting a font, otherwise nothing will happen.
|
|
If you pop up the color panel, you must drag colors to a frame for them to
|
|
have an effect. (Remember to hold down 'shift' to change background instead
|
|
of foreground.)
|
|
|
|
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 ``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 NS 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 overriden by
|
|
various faces). If this font is not set, Emacs.app 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 for NS 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 CursorBlinkRate
|
|
Users who want their cursor to blink can set the rate (in seconds) with
|
|
this defaults write. Setting it to @samp{NO} disables cursor blinking.
|
|
|
|
@example
|
|
defaults write Emacs CursorBlinkRate NO
|
|
@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 NS highlighting operator.
|
|
|
|
@example
|
|
defaults write Emacs CursorColor Highlight
|
|
@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 NS apps. 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 @ref{Preferences Panel}, this is
|
|
controlled by a slider. You must OK the panel and then restart Emacs.app 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
|
|
|
|
@node Tips and Tricks, Thanks, Customization, Top
|
|
@section Tips and Tricks
|
|
|
|
Emacs is an extremely customizable editor. You can make it conform to
|
|
virtually any conceivable user idiosyncrasy (and some which are not) by adding
|
|
a few well-chosen lines of emacs lisp to your @file{~/.emacs}. Unfortunately
|
|
even many experienced C developers are unfamiliar with Emacs Lisp. For that
|
|
reason many Emacs.app defaults have been chosen to make it behave as similar
|
|
to TextEdit as possible. But there are some customizations which a majority
|
|
of users probably would hate as much as a minority would love them. This
|
|
section contains a cookbook of such customizations. New contributions by
|
|
Emacs users are very welcome.
|
|
|
|
@menu
|
|
* Grabbing environment variables::
|
|
* Miscellaneous useful variables::
|
|
* Color adjustments::
|
|
* Evaling in the minibuffer::
|
|
* Highlighting matching parentheses::
|
|
* Dealing with X specific packages::
|
|
* Rebinding the numeric keypad::
|
|
* Improving C mode::
|
|
* Custom menu items::
|
|
* Single line scrolling::
|
|
* Open files by dragging to an Emacs window::
|
|
@ignore
|
|
* Extended font customization::
|
|
@end ignore
|
|
@end menu
|
|
|
|
@node Grabbing environment variables, Miscellaneous useful variables, Tips and Tricks, Tips and Tricks
|
|
@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 Miscellaneous useful variables, Color adjustments, Grabbing environment variables, Tips and Tricks
|
|
@subsection Miscellaneous useful variables
|
|
|
|
This section describes a few variables you might want to set in your
|
|
@file{~/.emacs} each of which doesn't warrant its own section.
|
|
|
|
There is a conflict between the way the region behaved in emacs in the
|
|
pre-GUI days and the way GUI users expect the selection to work. By
|
|
default that conflict is resolved by having the former adopt the
|
|
behaviour of the latter which most people prefer. However if you are a
|
|
die-hard emacs user you may prefer things the other way around and add
|
|
this line to your @file{~/.emacs}. Experiment with both settings.
|
|
|
|
@lisp
|
|
(setq transient-mark-mode nil)
|
|
@end lisp
|
|
|
|
When you try to move beyond the end of a file Emacs used to add newlines as
|
|
needed, however from Emacs-21 on, this was no longer done. If you prefer the
|
|
old behavior, this line in your @file{~/.emacs} will restore it.
|
|
|
|
@lisp
|
|
(setq next-line-add-newlines t)
|
|
@end lisp
|
|
|
|
By default when you kill a line with text on it, only the text is
|
|
removed while the line itself remains. You have to kill twice to really
|
|
get rid of the whole line. When this variable is set and you kill a
|
|
line while at the beginning of the line it will go at once.
|
|
|
|
@lisp
|
|
(setq kill-whole-line t)
|
|
@end lisp
|
|
|
|
Annoyed by the Emacs startup message ? Add this and you start with a
|
|
tabula rasa.
|
|
|
|
@lisp
|
|
(setq inhibit-startup-message t)
|
|
@end lisp
|
|
|
|
@node Color adjustments, Evaling in the minibuffer, Miscellaneous useful variables, Tips and Tricks
|
|
@subsection Color adjustments
|
|
|
|
A non-elisp hint: The easiest way to adjust your emacs color scheme is to
|
|
bring up a color panel (with @key{Cmd-C}) 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}.
|
|
|
|
@node Evaling in the minibuffer, Highlighting matching parentheses, Color adjustments, Tips and Tricks
|
|
@subsection Evaling in the minibuffer
|
|
|
|
Often you (at least if you are an elisp hacker) want to quickly evaluate
|
|
an elisp expression. To accomodate this desire Emacs provides the
|
|
@code{eval-expression} command bound to @key{M-:}. By default it is
|
|
disabled to protect novice users from themselves. These commands
|
|
re-enable it and turn on an extremely powerful completion facility.
|
|
|
|
@lisp
|
|
(put 'eval-expression 'disabled nil)
|
|
|
|
(define-key read-expression-map "\t" 'lisp-complete-symbol)
|
|
@end lisp
|
|
|
|
@node Highlighting matching parentheses, Dealing with X specific packages, Evaling in the minibuffer, Tips and Tricks
|
|
@subsection Highlighting matching parentheses
|
|
|
|
I doubt that there is anybody who doesn't use this already, but just in
|
|
case:
|
|
|
|
@lisp
|
|
(show-paren-mode 't)
|
|
@end lisp
|
|
|
|
In Emacs.app this is currently enhanced by use of the @code{mic-paren} package
|
|
from http://www.docs.uu.se/~mic/emacs.html.
|
|
|
|
@node Dealing with X specific packages, Rebinding the numeric keypad, Highlighting matching parentheses, Tips and Tricks
|
|
@subsection Dealing with X specific packages
|
|
|
|
Some emacs lisp packages explicitly call X specific functions instead of
|
|
calling generic functions which call the NS or X versions as appropriate.
|
|
Typically such packages will result in error messages like @samp{Symbol's
|
|
function definition is void: x-foo-bar}. The proper way of dealing with this
|
|
is to have the author fix the code to call the generic functions. Generally
|
|
all that requires is removing the @samp{x-} prefix from all function calls.
|
|
|
|
However, sometimes that is not possible, or it may be a package internal to
|
|
emacs itself. In this case please report a bug to the Emacs.app maintainers
|
|
(not the main GNU emacs maintainers).
|
|
|
|
A related problem is font names. For historical reasons, Emacs assumes all
|
|
font names are given ``X style'', as in ``-adobe-courier-....-iso8859-1''.
|
|
Emacs.app tries to work around this as well as possible, and the best thing to
|
|
do is never rely on functions to set font names yourself but to always use the
|
|
font panel.
|
|
|
|
@node Rebinding the numeric keypad, Improving C mode, Dealing with X specific packages, Tips and Tricks
|
|
@subsection Rebinding the numeric keypad
|
|
|
|
By default in Emacs the numeric keypad keys are bound to the same
|
|
characters they are in all other NS applications. But it is easy to
|
|
change these bindings to commands many will find more useful. As an
|
|
example here is the code which rebinds the numeric keypad for me.
|
|
|
|
@lisp
|
|
(global-set-key [kp-0] 'other-window)
|
|
(global-set-key [kp-1] 'end-of-buffer)
|
|
(global-set-key [kp-2] [down])
|
|
(global-set-key [kp-3] 'scroll-up)
|
|
(global-set-key [kp-4] [left])
|
|
(global-set-key [kp-5] 'set-mark-command)
|
|
(global-set-key [kp-6] [right])
|
|
(global-set-key [kp-7] 'beginning-of-buffer)
|
|
(global-set-key [kp-8] [up])
|
|
(global-set-key [kp-9] 'scroll-down)
|
|
(global-set-key [kp-decimal] 'yank)
|
|
(global-set-key [kp-enter] 'set-mark-command)
|
|
(global-set-key [kp-add] 'copy-region-as-kill)
|
|
(global-set-key [kp-subtract] 'kill-region)
|
|
@end lisp
|
|
|
|
On machines with function keys they can be bound as well. This for example
|
|
would bind @key{F12} to run gnus.
|
|
|
|
@lisp
|
|
(global-set-key [f12] 'gnus)
|
|
@end lisp
|
|
|
|
@node Improving C mode, Custom menu items, Rebinding the numeric keypad, Tips and Tricks
|
|
@subsection Improving C mode
|
|
|
|
That underscores are considered to break words in C mode has been driving me
|
|
insane for a long time. This line fixes the problem.
|
|
|
|
@lisp
|
|
(modify-syntax-entry ?_ "w" c-mode-syntax-table)
|
|
@end lisp
|
|
|
|
@node Custom menu items, Single line scrolling, Improving C mode, Tips and Tricks
|
|
@subsection Custom menu items
|
|
|
|
The tools menu is intended for customization. Adding items to it is
|
|
relatively painless as this example illustrates.
|
|
|
|
@lisp
|
|
(define-key global-map [menu-bar tools www] '("WWW" . w3-use-hotlist))
|
|
@end lisp
|
|
|
|
@node Single line scrolling, Open files by dragging to an Emacs window, Custom menu items, Tips and Tricks
|
|
@subsection Single line scrolling
|
|
|
|
The meta-arrow keys will perform single-line scrolling in Emacs
|
|
just like they did in the old NeXT/OpenStep Stuart.app.
|
|
|
|
@node Open files by dragging to an Emacs window, , Single line scrolling, Tips and Tricks
|
|
@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
|
|
|
|
@ignore
|
|
@node Extended font customization, , Single line scrolling, Tips and Tricks
|
|
@subsection Extended font customization
|
|
|
|
By default Emacs tries to guess the right font when you ask for a bold,
|
|
italic or bold-italic face. Unfortunately this fails sometimes, for
|
|
example Emacs won't guess that it should use @samp{Courier-Bold} as the
|
|
font for the bold face of @samp{Ohlfs}. As an example here is the code
|
|
which sets up @samp{Courier-Bold}, @samp{Courier-Oblique} and
|
|
@samp{Courier-BoldOblique} as the fonts to be used with @samp{Ohlfs}.
|
|
|
|
@lisp
|
|
(setq ns-convert-font-trait-alist
|
|
'(("Ohlfs" "Courier-Bold" "Courier-Oblique"
|
|
"Courier-BoldOblique")))
|
|
@end lisp
|
|
|
|
You will still have to set the @samp{DefaultFont}, @samp{BoldFont},
|
|
@samp{ItalicFont} and @samp{Bold-ItalicFont} defaults as Emacs
|
|
initializes the default faces before it reads your @file{~/.emacs}.
|
|
Also Emacs initializes @code{ns-convert-font-trait-alist} from these
|
|
defaults so that normally it's sufficient to set these defaults to get
|
|
correct faces.
|
|
|
|
@example
|
|
defaults write Emacs DefaultFont Ohlfs
|
|
defaults write Emacs BoldFont Courier-Bold
|
|
defaults write Emacs ItalicFont Courier-Oblique
|
|
defaults write Emacs Bold-ItalicFont Courier-BoldOblique
|
|
@end example
|
|
@end ignore
|
|
|
|
|
|
@node Thanks, , Tips and Tricks, Top
|
|
@section Thanks
|
|
A signficant number of people have been involved in the creation of Emacs.app.
|
|
Carl Edman <cedman@@lynx.ps.uci.edu> created and maintained Emacs up to
|
|
version 4.1 and it's reasonable to say that without his work, Emacs.app
|
|
wouldn't exist. Michael Brouwer <michael@@thi.nl> wrote the original version
|
|
(up to and including version 3.x) and was a constant contributor to Emacs.app
|
|
version 4 and above. Christian Limpach <chris@@nice.ch> took over maintenance
|
|
and updating at version 4.2, and made substantial contributions in a number of
|
|
areas. Scott Bender <sbender@@harmony-ds.com> ported the code to OpenStep and
|
|
Rhapsody for version 6.0. Christophe de Dinechin <ddd@@cup.hp.com> ported the
|
|
code to MacOS X for version 7.0 and moved the code base to SourceForge. Leigh
|
|
Smith <leigh@@leighsmith.com> maintained the SourceForge project for a period.
|
|
Adrian Robert <arobert@@cogsci.ucsd.edu> ported the code to GNUstep
|
|
(http://gnustep.org), updated it for post-emacs-20, and maintains it for the
|
|
present.
|
|
|
|
Also a number of others have contributed code. Steve Nygard
|
|
<nygard@@telusplanet.net> got emacs to dump under OpenStep. The font panel
|
|
code was Andrew Athan's <athan@@object.com> work. Joe Reiss
|
|
<jreiss@@magnus.acs.ohio-state.edu> both created the beautiful icons you see
|
|
and wrote the popup menu and dialog box code as well as much else.
|
|
|
|
Finally, suggestions from Darcy Brockbank, Timothy Bissell, Scott Byer, David
|
|
Griffiths, Scott Hess, Eberhard Mandler, John C. Randolph, and Bradley Taylor
|
|
all helped things along at one point or another. Axel Seibert
|
|
<seiberta@@informatik.tu-muenchen.de> and Paul J. Sanchez
|
|
<paul@@whimsy.umsl.edu> offered their time and machines to make a binary
|
|
release possible.
|
|
|
|
The GNUstep port was made possible through the assistance of Adam Fedor, Fred
|
|
Kiefer, M. Uli Klusterer, Alexander Malmberg, and Jonas Matton. Gürkan Sengün
|
|
made it accessible to a wider community.
|
|
|
|
Riccardo Mottola helped with compatibility with MacOS versions 10.1 and 10.2,
|
|
and GNUstep on platforms other than Linux.
|
|
|
|
Peter Dyballa kept things honest with multilingual support. Rahul Abrol, Adam
|
|
Ratcliffe, David M. Cooke, and Carsten Bormann provided various small patches.
|
|
|
|
Then there were a number of people who kept up the constant supply of bug
|
|
reports, suggested features and praise (which is the main fuel which the
|
|
development of a project like this runs) and so helped ensure that this
|
|
program is as bug free (hah !) and feature rich as you see it today. First
|
|
among them were Hardy Mayer <hardy@@golem.ps.uci.edu>, Gisli Ottarsson
|
|
<gisli@@timoshenko.eecs.umich.edu>, Anthony Heading <ajrh@@signal.dra.hmg.gb>,
|
|
David Bau <bau@@cs.cornell.edu>, Jamie Zawinski <jwz@@lucid.com>, Martin
|
|
Moncrieffe <moncrief@@mayo.edu>, Simson L. Garfinkel
|
|
<simsong@@next.cambridge.ma.us>, Richard Stallman <rms@@gnu.ai.mit.edu>,
|
|
Stephen Anderson <anderson@@sapir.cog.jhu.edu>, Ivo Welch
|
|
<ivo@@next.agsm.ucla.edu>, Magnus Nordborg <magnus@@fisher.Stanford.EDU>, Tom
|
|
Epperly <epperly@@valeron.che.wisc.edu>, Andreas Koenig
|
|
<k@@franz.ww.tu-berlin.de>, Yves Arrouye <Yves.Arrouye@@imag.fr>, Anil
|
|
Somayaji <soma@@hotspur.mit.edu>, Gregor Hoffleit
|
|
<flight@@mathi.uni-heidelberg.DE> and doubtlessly many more.
|
|
|
|
Finally, let us also thank those few hundred other people on the mailing list
|
|
from whom we didn't hear much, but the presence of which assured us that maybe
|
|
this project was actually worth doing.
|
|
@bye
|
|
|
|
@ignore
|
|
arch-tag: 286bdf18-ccfb-48b2-b730-994771de6bdd
|
|
@end ignore
|