1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-27 10:54:40 +00:00
emacs/nextstep
2016-02-22 07:44:28 -08:00
..
Cocoa/Emacs.base/Contents Update the new icon 2015-10-24 13:37:45 +02:00
GNUstep/Emacs.base/Resources Increase compartmentalization of Nextstep builds rules, 2012-09-16 11:49:00 -07:00
templates Update copyright year to 2016 2016-01-01 01:34:24 -08:00
ChangeLog.1 Update copyright year to 2016 2016-01-01 01:34:24 -08:00
INSTALL Update copyright year to 2016 2016-01-01 01:34:24 -08:00
Makefile.in Update copyright year to 2016 2016-01-01 01:34:24 -08:00
README Update NextStep readme and add wish list. 2016-02-20 16:24:40 +01:00
WISHLIST ; Spelling fix 2016-02-22 07:44:28 -08:00

  NS -- the Cocoa interface for OS X and compatible systems
  ---------------------------------------------------------

This directory contains files needed to build Emacs on system based on
NextStep (NS), including OS X (Mac) and GNUstep, using the Cocoa API.


  HISTORY

Up to Emacs 22, the OS X interface was implemented using the C-based
Carbon API.  Starting with Emacs 23, the interface was rewritten in
Objective-C using the Cocoa API.  Meanwhile, the Carbon interface has
been maintained independently under the name "mac".


  OVERVIEW OF COCOA AND OBJECTIVE-C

Cocoa is an API for the Objective-C language, an objective oriented
superset of C.  Anybody with experience with iOS or modern OS X
application development should feel at home.

A method call in Objective-C differs from most other languages in the
fact that it doesn't have a normal name.  Instead, the method name is
made up of the name of each parameter.  An exception to this rule are
methods without parameters.

The following calls a method in the object `anObject'.

    [anObject alpha:1 beta:2 gamma:3];

Classes are declared like the following:

    @interface AClassName
    {
      // A class method.
      + (TYPE)name1:(TYPE)param1

      // An object method.
      - (TYPE)name1:(TYPE)param1 name2:(TYPE)param2;
    }
    @end


  GUIDELINES

* Adhere the to the FSF philosophy that a feature in GNU software
  should not only be available on non-free systems.

* People with varying Cocoa and Objective-C skills will read and
  modify the NS code over a long period of time.  Keep the code simple
  and avoid language constructs that makes the code hard to maintain.

* Don't use macros and types intended for the XCode Interface Builder,
  like `IBAction'.

* The NS interface should work on all version of OS X from 10.6.8
  (Snow Leopard) to the latest official release.

* Under OS X, it is possible to build Emacs using NS, X11, or console
  only.  A new OS X feature should work in all appropriate builds.


  TRACING SUPPORT

The NS interface features a printf-based trace package that prints the
call tree of selected functions in the Cocoa interface, plus various
extra information.  It can be enabled by uncommenting the line
defining `NSTRACE_ENABLED' in "nsterm.h".  To enable more output,
uncomment the lines defining symbols starting with `NSTRACE_GROUP'.


  GNUSTEP AND OTHER COMPATIBLE SYSTEMS

The NS interface works on system compatible with OS X, for example
GNUstep.  Even though they are less frequently used, this is important
for a number of reasons:

* It supports the GNUstep project and provides an Emacs with the same
  look-and-feel as the rest of the system.

* This allows other Emacs developers to test their changes on the NS
  interface without having access to an OS X machine.

* If a feature in the NS interface work on free systems like GNUstep,
  this meets the FSF requirement that features in GNU software should
  not only be available on non-free systems.


  SEE ALSO

The src/ns... files contains the C and Objective-C parts.

The lisp/term/ns-win.el file contains the lisp part of the NS
interface.

The INSTALL file in this directory for compilation instructions.

The WISHLIST file in this directory for a list of ideas for future
development of the NS interface.