Distribution
************

Copyright © 1994 Carl Edman.

Copyright © 1997 Christian Limpach. Copyright © 1997 Scott Bender. Copyright © 2001 Christophe de Dinechin. Copyright © 2005-07 Adrian Robert.

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the same conditions as for modified versions.

Emacs.app
*********

Emacs.app for GNUstep and MacOS X (http://emacs-app.sf.net) is a version of GNU Emacs CVS unicode-2 branch (currently planned to be released as Emacs 23) which adds support for the GNUstep and MacOS X systems via the OpenStep APIs (referred to as "Cocoa" under OS X).  Support for NeXTstep, OpenStep, and Rhapsody systems has been dropped.  For those systems, use "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 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.

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.

  * 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:

          (global-set-key [mouse-3] 'mouse-yank-at-click)

     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,

  * 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 Events.)  You can change either of these bindings using the preferences panel (see Preferences Panel).

  * 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 Preferences' from under the Help menu.  To discard these settings, create a new frame and close the altered one.

  * 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.

  * 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.

  * The window-system variable can now have the value ns in addition to, e.g., x or 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.

          (if window-system
              ...       ;;; evaluate if any window system is running
            ...)        ;;; evaluate only when running on a dumb terminal

     For more detailed control, use this.

          (cond
           ((eq window-system 'ns)         ;;; NS specific instructions
            ...)
           ((eq window-system 'x)          ;;; X specific instructions
            ...)
           (t      ;;; Instructions for dumb terminal or other window systems
            ...))

  * Likewise, you can detect whether you are running in emacs-23 or an earlier version with:

             (if (eq emacs-major-version '23) <emacs-23 code> <emacs-22- code>)

  * 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.

  * 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 Preferences Panel and Customization).

  * When Emacs is called by a name which ends in -nw it will always start in terminal mode.  For example, a user who needs a terminal only emacs would create a symbolic link from emacs to emacs-nw. When he launches 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.)

Events
======

Under Emacs.app the NeXTstep command key works as the 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.

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 ns-input-file.

     The behaviour of the default binding is controlled by the variable ns-pop-up-frames.  It's default value '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 ns-pop-up-frames to t.  To get the opposite behaviour (i.e. always putting the file into the selected frame), change ns-pop-up-frames to nil.

ns-open-temp-file
     This event occurs when another application requests that Emacs open a temporary file.  The file name is again in ns-input-file.  By default this is handled by just generating a ns-open-file event (which then causes the ns-open-file function to be called whatever that may be).

          (define-key global-map [ns-open-temp-file] [ns-open-file])

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 ns-input-file, and 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.

          (define-key global-map [ns-open-file-line] 'ns-open-file-select-line)

ns-drag-file
     When a user drags files from another application into an Emacs frame this event is triggered.  Here ns-input-file is a list of all dragged files.  The default binding inserts all the dragged files into the current buffer.

          (define-key global-map [ns-drag-file] 'ns-insert-files)

ns-drag-color
     When a user drags a color from the color well (or some other source) Emacs sees this event and 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).

          (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)

ns-change-font
     Emacs.app allows the user to open a standard NS font panel (by default that function is bound to Cmd-t).  When the user selects a font in that panel this event occurs.  ns-input-font will contain the name of the selected font and ns-input-fontsize is its size.  The default binding causes Emacs to adjust the font of the selected frame.

          (define-key global-map [ns-change-font] 'ns-respond-to-changefont)

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.

          (define-key global-map [ns-power-off]
            '(lambda () (interactive) (save-buffers-kill-emacs t)))

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 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.

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 defaults command. (See Customization.)

Text Rendering Preferences
==========================

Font and color settings can be set using the standard NeXTstep font and color panels.

  * 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.

  * 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.

  * To use antialiased text check the Smooth Fonts option.  Lighter font smoothing can be achieved by checking the Use Quickdraw (lighter) smoothing option.

  * 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.

Display Preferences
===================

The Display Preferences can be used to change the appearance of the default cursor used by Emacs.

  * The Cursor Type radio buttons can be used to select the style used for the cursor:

       * Box - the cursor is displayed as a box

       * Underscore - the cursor is displayed as a horizontal bar

       * Bar - the cursor is displayed as a vertical bar

       * Hollow - the cursor is displayed as a box with an outline but no fill

  * Use the Cursor Blink Rate slider to set the frequency at which the cursor blinks.

  * Check the Use System Highlight Color option to use the system default color for highlighted text.

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.

  * To re-bind the Alt or Opt key select a keybinding from the Alt/Opt Key combo box.

  * To re-bind the Command key select a keybinding from the Command Key combo box.

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 x-get-resource function.  Under NS defaults fulfill a similar function. They can be read using the ns-get-resource function.  Calls to x-get-resource are automatically mapped to ns-get-resource. From the command line, the command `defaults read Emacs' will show these resources as of last Emacs quit, and individual resources can be read/written by commands like `defaults read Emacs Foo' and `defaults write Emacs Foo barvalue'.

Calling the function 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 default-frame-alist in the ~/.emacs file.

Many of the preferences relating specifically to the NS windowing system (font rendering, cursor type, etc.) can be set using a 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, all NS settings are saved (including font and colors) just as if you had called 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 ARGBaarrggbb where AA, RR, GG, and BB are two hexadecimal digits describing the alpha, red, green, and blue content of the color respectively.  HSBhhssbbaa, CMYKccmmyykkaa and GRAYggaa are the equivalents in HSB, CMYK and gray scales.

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.

          defaults write Emacs InternalBorderWidth 2

VerticalScrollBars
     YES or NO to enable or disable scroll bars, left or right to explicitly set the side.

          defaults write Emacs VerticalScrollBars YES

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 Monaco which doesn't have any bold or italic versions.  (Italic will be synthesized.)

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.

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

          defaults write Emacs Foreground "Black"

Background
     The default background color for new frames.

          defaults write Emacs Background "White"

Height
     Height in rows of the default window.

          defaults write Emacs Height 48

Width
     Width in columns of the default window.

          defaults write Emacs Width 80

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

          defaults write Emacs CursorType box

CursorBlinkRate
     Users who want their cursor to blink can set the rate (in seconds) with this defaults write.  Setting it to NO disables cursor blinking.

          defaults write Emacs CursorBlinkRate NO

CursorColor
     Name of the default cursor color for Emacs.  Of a particular use for this setting is the Highlight "color".  When it is the cursor color, Emacs will draw the cursor using the standard NS highlighting operator.

          defaults write Emacs CursorColor Highlight

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

          defaults write Emacs Top 100

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

          defaults write Emacs Left 100

HideOnAutoLaunch
     YES or NO to determine whether Emacs will hide itself when autolaunched from the dock.

          defaults write Emacs HideOnAutoLaunch NO

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 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 "defaults write", you can either set a floating point value, or YES, which is equivalent 0.5, or NO, which is equivalent to 0.0.

          defaults write Emacs ExpandSpace -0.125

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.

          defaults write Emacs GSFontAntiAlias NO

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.

          defaults write Emacs UseQuickdrawSmoothing YES

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

          defaults write Emacs AlternateModifier "none"

CommandModifier
     This allows you to set the effect of the Command key.  The default is super, which is used in a set of keybindings such as s-o for ``open file'' and 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 meta so they still have easy access to Emacs functionality bound to meta keys.  You can also set this, like Alt/Opt, to hyper or alt, though there are no bindings to combinations using these keys by default.  The none option is not available for the Command key.

          defaults write Emacs CommandModifier "meta"

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

          defaults write Emacs TestFrame "100 200 30 70"

     Another default previouly used by many Emacs users is this.

          defaults write Workspace DefaultOpenApp Emacs

     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 ~/Applications and ~/Applications).  If anyone knows the current way to do this under OS X please contact the authors.

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 ~/.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.

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:

     .../Emacs.app/Contents/MacOS/bin/mac-fix-env

This will pick up your environment settings and save them into a special 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 ns-grabenv command inside Emacs.  This function will run a subshell and copy its environment variables into Emacs.

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

     (if window-system (ns-grabenv))

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

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

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

Miscellaneous useful variables
------------------------------

This section describes a few variables you might want to set in your ~/.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 ~/.emacs.  Experiment with both settings.

     (setq transient-mark-mode nil)

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 ~/.emacs will restore it.

     (setq next-line-add-newlines t)

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.

     (setq kill-whole-line t)

Annoyed by the Emacs startup message ?  Add this and you start with a tabula rasa.

     (setq inhibit-startup-message t)

Color adjustments
-----------------

A non-elisp hint: The easiest way to adjust your emacs color scheme is to bring up a color panel (with 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 ns-save-preferences.  Useful in this context is the listing of all faces obtained by M-x list-faces-display.

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 eval-expression command bound to 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.

     (put 'eval-expression 'disabled nil)

     (define-key read-expression-map "\t" 'lisp-complete-symbol)

Highlighting matching parentheses
---------------------------------

I doubt that there is anybody who doesn't use this already, but just in case:

     (show-paren-mode 't)

In Emacs.app this is currently enhanced by use of the mic-paren package from http://www.docs.uu.se/~mic/emacs.html.

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 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 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.

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.

     (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)

On machines with function keys they can be bound as well.  This for example would bind F12 to run gnus.

     (global-set-key [f12] 'gnus)

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.

     (modify-syntax-entry ?_ "w" c-mode-syntax-table)

Custom menu items
-----------------

The tools menu is intended for customization.  Adding items to it is relatively painless as this example illustrates.

     (define-key global-map [menu-bar tools www] '("WWW" . w3-use-hotlist))

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.

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 ns-drag-file event to open the dragged files in the current frame use the following line:

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

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.  (Actually, Joe's icon became the one used for the Mac Carbon port..)

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.