Update NextStep readme and add wish list.
* nextstep/README: Rewritten from scratch. New sections on "History", "Overview of Cocoa and Objective-C", "Guidelines", "Tracing Support", and "GNUStep". Expanded the "See Also" section. * nextstep/WISHLIST: New file containing list of issues and ideas associated with the NS port of Emacs.
This commit is contained in:
parent
6de26a78de
commit
c5f72aa573
2 changed files with 346 additions and 3 deletions
102
nextstep/README
102
nextstep/README
|
@ -1,4 +1,100 @@
|
|||
This directory contains files needed to build Emacs on Nextstep-based
|
||||
platforms, including GNUstep and Mac OS X (using the Cocoa libraries).
|
||||
|
||||
See the INSTALL file in this directory for compilation instructions.
|
||||
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.
|
||||
|
|
247
nextstep/WISHLIST
Normal file
247
nextstep/WISHLIST
Normal file
|
@ -0,0 +1,247 @@
|
|||
-*- org -*-
|
||||
|
||||
Wish list for the "NS" OS X Emacs port
|
||||
--------------------------------------
|
||||
|
||||
Note: This document is written using "org-mode", a plain-text
|
||||
format supporting outlines. To expand a heading, press TAB. To
|
||||
expand all headings and subheadings, press S-TAB until Emacs
|
||||
responds "SHOW ALL".
|
||||
|
||||
* Introduction
|
||||
|
||||
This is a wishlist for future development of the "NS" Emacs user
|
||||
interface whose primary use is the official Emacs version on OS X.
|
||||
|
||||
This list should be seen as a complement to the bug- and wishlist on
|
||||
[[http://debbugs.gnu.org/cgi/pkgreport.cgi?package%3Demacs][debbugs]], the Emacs bug tracker.
|
||||
|
||||
* Missing features
|
||||
|
||||
This sections contains features found in other official Emacs ports.
|
||||
|
||||
** Support for "xwidget"
|
||||
|
||||
Emacs 25 has support for "xwidgets", a system to include operating
|
||||
system components into an Emacs buffer. The components range from
|
||||
simple buttons to "webkit" (effectively, a web browser).
|
||||
|
||||
Currently, "xwidget" only works for the "gtk+" framework but it is
|
||||
designed to be compatible with multiple Emacs ports.
|
||||
|
||||
** Respect `frame-inhibit-implied-resize'
|
||||
|
||||
When the variable `frame-inhibit-implied-resize' is non-nil, frames
|
||||
should not be resized when operations like changing font or toggling
|
||||
the tool bar is performed.
|
||||
|
||||
Unfortunately, the tool bar (and possible other operations) always
|
||||
resize the frame.
|
||||
|
||||
** Support `proced' (implement `process-attributes')
|
||||
|
||||
Unfortunately, a user-level process like Emacs does not have the
|
||||
privileges to get information about other processes under OS X.
|
||||
|
||||
There are other ways to do this:
|
||||
|
||||
1) Spawn "ps" and parse the output ("ps" has superuser privileges).
|
||||
|
||||
2) Sign Emacs as part of the distribution process.
|
||||
|
||||
3) Ask the user to self-sign Emacs, if this feature is of interest.
|
||||
|
||||
Anders Lindgren <andlind@gmail.com> has implemented
|
||||
`process-attributes' for OS X -- which currently only work when
|
||||
running Emacs as root.
|
||||
|
||||
[[http://emacsredux.com/blog/2013/05/02/manage-processes-with-proced/][See this article by Bozhidar Batsov for an overview of Proced.]]
|
||||
|
||||
** Tooltip properties
|
||||
|
||||
Tooltip properties like the background color and font are hard wired,
|
||||
even though Emacs allow a user to customize such features.
|
||||
|
||||
* New features
|
||||
|
||||
This section contains features unique to the NS and/or OS X.
|
||||
|
||||
** PressAndHold for writing accented character
|
||||
|
||||
On OS X, many application supports the press and hold pattern to
|
||||
invoke a menu of accented characters. (See example at [[https://support.apple.com/en-us/HT201586][Apple]].)
|
||||
|
||||
Currently, this doesn't work in Emacs.
|
||||
|
||||
Note that "ns-win.el" explicitly disables this.
|
||||
|
||||
Note: This feature might not be allowed to be implemented until also
|
||||
implemented in Emacs for a free system.
|
||||
|
||||
** Floating scroll bars
|
||||
|
||||
In modern OS X applications, the scroll bar often float over the
|
||||
content, and is invisible unless actually used. This makes user
|
||||
interface less cluttered and more area could be used to contain text.
|
||||
|
||||
With floating scroll bars, the user interface would look like it does
|
||||
when they are disabled today. However, they will be made visible when
|
||||
a scroll action is initiated, e.g. by putting two fingers on a
|
||||
trackpad.
|
||||
|
||||
Note: This feature might not be allowed to be implemented until also
|
||||
implemented in Emacs for a free system.
|
||||
|
||||
* Features from the "mac" port
|
||||
|
||||
This section contains features available in the "mac" Emacs port.
|
||||
|
||||
As the "mac" port (as of this writing) isn't an official Emacs port,
|
||||
it might contain features not following the FSF rule "must exist on
|
||||
free systems".
|
||||
|
||||
The "mac" port is based on the Emacs 22 C-based Carbon interface. It
|
||||
has been maintained in parallel to the official Cocoa-based NS
|
||||
interface. The Carbon interface has been enhanced, and a number of the
|
||||
features of that interface could be implemented NS.
|
||||
|
||||
** Smooth scrolling -- maybe not a good idea
|
||||
|
||||
Today, by default, scrolling with a trackpad makes the text move in
|
||||
steps of five lines. (Scrolling with SHIFT scrolls one line at a
|
||||
time.)
|
||||
|
||||
The "mac" port provides smooth, pixel-based, scrolling. This is a very
|
||||
popular features. However, there are drawbacks to this method: what
|
||||
happens if only a fraction of a line is visible at the top of a
|
||||
window, is the partially visible text considered part of the window or
|
||||
not? (Technically, what should `window-start' return.)
|
||||
|
||||
An alternative would be to make one-line scrolling the default on NS
|
||||
(or in Emacs in general).
|
||||
|
||||
Note: This feature might not be allowed to be implemented until also
|
||||
implemented in Emacs for a free system.
|
||||
|
||||
** Mouse gestures
|
||||
|
||||
The "mac" port defines the gestures `swipe-left/right/up/down',
|
||||
`magnify-up/down', and `rotate-left/right'.
|
||||
|
||||
It also binds the magnification commands to change the font
|
||||
size. (This should be not be done in a specific interface, instead
|
||||
Emacs should do this binding globally.)
|
||||
|
||||
Note: This feature might not be allowed to be implemented until also
|
||||
implemented in Emacs for a free system.
|
||||
|
||||
** Synthesize bold fonts
|
||||
|
||||
* Open issues
|
||||
|
||||
This section contains issues where there is an ongoing debate.
|
||||
|
||||
** Key bindings of CMD and ALT
|
||||
|
||||
Currently in the "ns" port, ALT is bound to Meta and CMD is bound to
|
||||
Super -- allowing the user to use typical OS X commands like CMD-A to
|
||||
mark everything.
|
||||
|
||||
Unfortunately, when using an international keyboard, you can't type
|
||||
normal characters like "(" etc.
|
||||
|
||||
There are many alternative key bindings. One solution is to bind CMD
|
||||
to Meta and pass ALT to the system. In fact, this is what Emacs did up
|
||||
to, and including, version 22. Also, this is how the "mac" port binds
|
||||
the keys.
|
||||
|
||||
One could envision asymmetrical variants as well, however, this is
|
||||
inappropriate for the default setting.
|
||||
|
||||
See the discussion on emacs-devel [[https://lists.gnu.org/archive/html/emacs-devel/2015-12/msg01575.html][part 1]] and [[https://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00008.html][part 2]].
|
||||
|
||||
* Bugs
|
||||
|
||||
This sections contains a small selection of bugs which are hard to
|
||||
fix. For other bugs, see the official bug tracker debbugs.gnu.org.
|
||||
|
||||
** Incorrect translation of Super modifier with Ctrl or Meta on OS X
|
||||
|
||||
When pressing `M-s-a', Emacs replies "M-s-å is undefined". What
|
||||
happened is a mix of Emacs view that Meta and Super has been pressed,
|
||||
and OS X view that ALT-a should yield "å".
|
||||
|
||||
The bug reports suggests two different patched, unfortunately, none
|
||||
work properly. For example:
|
||||
|
||||
Use a Swedish keyboard layout
|
||||
|
||||
(setq ns-alternate-modifier nil)
|
||||
|
||||
"CMD-ALT-9"
|
||||
|
||||
Today, this correctly yields that s-] is undefined. With the either
|
||||
of the two patches, Emacs responds that s-9 was pressed.
|
||||
|
||||
More investigation is needed to fix this problem.
|
||||
|
||||
Links:
|
||||
- [[http://debbugs.gnu.org/cgi/bugreport.cgi?bug%3D19977][bug#19977]]
|
||||
- [[http://debbugs.gnu.org/cgi/bugreport.cgi?bug%3D21330][bug#21330]]
|
||||
- [[http://debbugs.gnu.org/cgi/bugreport.cgi?bug%3D21551][bug#21551]]
|
||||
|
||||
** Toggline the toolbar in fullheight or maximized modes
|
||||
|
||||
The toolbar, in the NS interface, is not considered part of the text
|
||||
area. When it is toggled, the Emacs frame change height accordingly.
|
||||
|
||||
Unfortunately, this also occurs when the frame is in fullheight or
|
||||
maximized modes (N.B. this is not the same as "fullscreen"). The
|
||||
effect is that the full frame size either increases (stretching down
|
||||
below the lower edge of the screen) or decreases (leaving space
|
||||
between the lower edge of the frame and the lower edge of the screen).
|
||||
|
||||
A better solution would be for the frame to retain its size,
|
||||
i.e. change the text area.
|
||||
|
||||
This is related to the `frame-inhibit-implied-resize' issue.
|
||||
|
||||
* Internal development features
|
||||
|
||||
** Regression test system (or at least a checklist)
|
||||
|
||||
Today, after each change to the user interface, Emacs must be manually
|
||||
tested. Often, small details are overlooked ("Oh, I didn't test
|
||||
toggling the tool-bar in one of the full screen modes, when multiple
|
||||
frame were open -- silly me.")
|
||||
|
||||
It would be an enormous help if this could be tested automatically.
|
||||
Many features are generic, however, the NS interface provides a number
|
||||
of unique features.
|
||||
|
||||
*** Existing packages
|
||||
|
||||
Note that there is a generic UI test named "[[http://debbugs.gnu.org/cgi/bugreport.cgi?bug%3D21415#284][frame-test.el]]". The NS
|
||||
interface pass this, with the exception of two toolbar related
|
||||
errors.
|
||||
|
||||
*** Anders frame test
|
||||
|
||||
Anders Lindgren <andlind@gmail.com> has implmented some (very basic)
|
||||
tests for full screen, toolbar, and auto-hiding the menu bar.
|
||||
|
||||
** Make sure all build variants work
|
||||
|
||||
Emacs can be build in a number of different ways. For each feature,
|
||||
consider if is really is "NS" specific, or if it should be applied to
|
||||
all build versions.
|
||||
|
||||
- With the "NS" interface. This is the normal way to build Emacs on
|
||||
OS X.
|
||||
|
||||
- With the "X11" interface. On OS X, this is mainly of interest to
|
||||
developers of Emacs to get a "reference" interface implementations.
|
||||
However, it might be of interest for people working remotely, as X11
|
||||
applications can be used over a network connection.
|
||||
|
||||
- Console only.
|
Loading…
Add table
Reference in a new issue