aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Lindgren2016-02-20 16:24:40 +0100
committerAnders Lindgren2016-02-20 16:24:40 +0100
commitc5f72aa573bc45b82ad6479ae0eba5ffc7916fb9 (patch)
tree2d8062ffe5f85110144978cc05bd0805b57ef036
parent6de26a78de83ca9a8f096056e91c14fdb2aedc84 (diff)
downloademacs-c5f72aa573bc45b82ad6479ae0eba5ffc7916fb9.tar.gz
emacs-c5f72aa573bc45b82ad6479ae0eba5ffc7916fb9.zip
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.
-rw-r--r--nextstep/README102
-rw-r--r--nextstep/WISHLIST247
2 files changed, 346 insertions, 3 deletions
diff --git a/nextstep/README b/nextstep/README
index 45b9b23ee10..c16d55b35b9 100644
--- a/nextstep/README
+++ b/nextstep/README
@@ -1,4 +1,100 @@
1This directory contains files needed to build Emacs on Nextstep-based
2platforms, including GNUstep and Mac OS X (using the Cocoa libraries).
3 1
4See the INSTALL file in this directory for compilation instructions. 2 NS -- the Cocoa interface for OS X and compatible systems
3 ---------------------------------------------------------
4
5This directory contains files needed to build Emacs on system based on
6NextStep (NS), including OS X (Mac) and GNUstep, using the Cocoa API.
7
8
9 HISTORY
10
11Up to Emacs 22, the OS X interface was implemented using the C-based
12Carbon API. Starting with Emacs 23, the interface was rewritten in
13Objective-C using the Cocoa API. Meanwhile, the Carbon interface has
14been maintained independently under the name "mac".
15
16
17 OVERVIEW OF COCOA AND OBJECTIVE-C
18
19Cocoa is an API for the Objective-C language, an objective oriented
20superset of C. Anybody with experience with iOS or modern OS X
21application development should feel at home.
22
23A method call in Objective-C differs from most other languages in the
24fact that it doesn't have a normal name. Instead, the method name is
25made up of the name of each parameter. An exception to this rule are
26methods without parameters.
27
28The following calls a method in the object `anObject'.
29
30 [anObject alpha:1 beta:2 gamma:3];
31
32Classes are declared like the following:
33
34 @interface AClassName
35 {
36 // A class method.
37 + (TYPE)name1:(TYPE)param1
38
39 // An object method.
40 - (TYPE)name1:(TYPE)param1 name2:(TYPE)param2;
41 }
42 @end
43
44
45 GUIDELINES
46
47* Adhere the to the FSF philosophy that a feature in GNU software
48 should not only be available on non-free systems.
49
50* People with varying Cocoa and Objective-C skills will read and
51 modify the NS code over a long period of time. Keep the code simple
52 and avoid language constructs that makes the code hard to maintain.
53
54* Don't use macros and types intended for the XCode Interface Builder,
55 like `IBAction'.
56
57* The NS interface should work on all version of OS X from 10.6.8
58 (Snow Leopard) to the latest official release.
59
60* Under OS X, it is possible to build Emacs using NS, X11, or console
61 only. A new OS X feature should work in all appropriate builds.
62
63
64 TRACING SUPPORT
65
66The NS interface features a printf-based trace package that prints the
67call tree of selected functions in the Cocoa interface, plus various
68extra information. It can be enabled by uncommenting the line
69defining `NSTRACE_ENABLED' in "nsterm.h". To enable more output,
70uncomment the lines defining symbols starting with `NSTRACE_GROUP'.
71
72
73 GNUSTEP AND OTHER COMPATIBLE SYSTEMS
74
75The NS interface works on system compatible with OS X, for example
76GNUstep. Even though they are less frequently used, this is important
77for a number of reasons:
78
79* It supports the GNUstep project and provides an Emacs with the same
80 look-and-feel as the rest of the system.
81
82* This allows other Emacs developers to test their changes on the NS
83 interface without having access to an OS X machine.
84
85* If a feature in the NS interface work on free systems like GNUstep,
86 this meets the FSF requirement that features in GNU software should
87 not only be available on non-free systems.
88
89
90 SEE ALSO
91
92The src/ns... files contains the C and Objective-C parts.
93
94The lisp/term/ns-win.el file contains the lisp part of the NS
95interface.
96
97The INSTALL file in this directory for compilation instructions.
98
99The WISHLIST file in this directory for a list of ideas for future
100development of the NS interface.
diff --git a/nextstep/WISHLIST b/nextstep/WISHLIST
new file mode 100644
index 00000000000..673f091b7b4
--- /dev/null
+++ b/nextstep/WISHLIST
@@ -0,0 +1,247 @@
1 -*- org -*-
2
3 Wish list for the "NS" OS X Emacs port
4 --------------------------------------
5
6 Note: This document is written using "org-mode", a plain-text
7 format supporting outlines. To expand a heading, press TAB. To
8 expand all headings and subheadings, press S-TAB until Emacs
9 responds "SHOW ALL".
10
11* Introduction
12
13This is a wishlist for future development of the "NS" Emacs user
14interface whose primary use is the official Emacs version on OS X.
15
16This list should be seen as a complement to the bug- and wishlist on
17[[http://debbugs.gnu.org/cgi/pkgreport.cgi?package%3Demacs][debbugs]], the Emacs bug tracker.
18
19* Missing features
20
21This sections contains features found in other official Emacs ports.
22
23** Support for "xwidget"
24
25Emacs 25 has support for "xwidgets", a system to include operating
26system components into an Emacs buffer. The components range from
27simple buttons to "webkit" (effectively, a web browser).
28
29Currently, "xwidget" only works for the "gtk+" framework but it is
30designed to be compatible with multiple Emacs ports.
31
32** Respect `frame-inhibit-implied-resize'
33
34When the variable `frame-inhibit-implied-resize' is non-nil, frames
35should not be resized when operations like changing font or toggling
36the tool bar is performed.
37
38Unfortunately, the tool bar (and possible other operations) always
39resize the frame.
40
41** Support `proced' (implement `process-attributes')
42
43Unfortunately, a user-level process like Emacs does not have the
44privileges to get information about other processes under OS X.
45
46There are other ways to do this:
47
48 1) Spawn "ps" and parse the output ("ps" has superuser privileges).
49
50 2) Sign Emacs as part of the distribution process.
51
52 3) Ask the user to self-sign Emacs, if this feature is of interest.
53
54Anders Lindgren <andlind@gmail.com> has implemented
55`process-attributes' for OS X -- which currently only work when
56running Emacs as root.
57
58[[http://emacsredux.com/blog/2013/05/02/manage-processes-with-proced/][See this article by Bozhidar Batsov for an overview of Proced.]]
59
60** Tooltip properties
61
62Tooltip properties like the background color and font are hard wired,
63even though Emacs allow a user to customize such features.
64
65* New features
66
67This section contains features unique to the NS and/or OS X.
68
69** PressAndHold for writing accented character
70
71On OS X, many application supports the press and hold pattern to
72invoke a menu of accented characters. (See example at [[https://support.apple.com/en-us/HT201586][Apple]].)
73
74Currently, this doesn't work in Emacs.
75
76Note that "ns-win.el" explicitly disables this.
77
78Note: This feature might not be allowed to be implemented until also
79implemented in Emacs for a free system.
80
81** Floating scroll bars
82
83In modern OS X applications, the scroll bar often float over the
84content, and is invisible unless actually used. This makes user
85interface less cluttered and more area could be used to contain text.
86
87With floating scroll bars, the user interface would look like it does
88when they are disabled today. However, they will be made visible when
89a scroll action is initiated, e.g. by putting two fingers on a
90trackpad.
91
92Note: This feature might not be allowed to be implemented until also
93implemented in Emacs for a free system.
94
95* Features from the "mac" port
96
97This section contains features available in the "mac" Emacs port.
98
99As the "mac" port (as of this writing) isn't an official Emacs port,
100it might contain features not following the FSF rule "must exist on
101free systems".
102
103The "mac" port is based on the Emacs 22 C-based Carbon interface. It
104has been maintained in parallel to the official Cocoa-based NS
105interface. The Carbon interface has been enhanced, and a number of the
106features of that interface could be implemented NS.
107
108** Smooth scrolling -- maybe not a good idea
109
110Today, by default, scrolling with a trackpad makes the text move in
111steps of five lines. (Scrolling with SHIFT scrolls one line at a
112time.)
113
114The "mac" port provides smooth, pixel-based, scrolling. This is a very
115popular features. However, there are drawbacks to this method: what
116happens if only a fraction of a line is visible at the top of a
117window, is the partially visible text considered part of the window or
118not? (Technically, what should `window-start' return.)
119
120An alternative would be to make one-line scrolling the default on NS
121(or in Emacs in general).
122
123Note: This feature might not be allowed to be implemented until also
124implemented in Emacs for a free system.
125
126** Mouse gestures
127
128The "mac" port defines the gestures `swipe-left/right/up/down',
129`magnify-up/down', and `rotate-left/right'.
130
131It also binds the magnification commands to change the font
132size. (This should be not be done in a specific interface, instead
133Emacs should do this binding globally.)
134
135Note: This feature might not be allowed to be implemented until also
136implemented in Emacs for a free system.
137
138** Synthesize bold fonts
139
140* Open issues
141
142This section contains issues where there is an ongoing debate.
143
144** Key bindings of CMD and ALT
145
146Currently in the "ns" port, ALT is bound to Meta and CMD is bound to
147Super -- allowing the user to use typical OS X commands like CMD-A to
148mark everything.
149
150Unfortunately, when using an international keyboard, you can't type
151normal characters like "(" etc.
152
153There are many alternative key bindings. One solution is to bind CMD
154to Meta and pass ALT to the system. In fact, this is what Emacs did up
155to, and including, version 22. Also, this is how the "mac" port binds
156the keys.
157
158One could envision asymmetrical variants as well, however, this is
159inappropriate for the default setting.
160
161See 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]].
162
163* Bugs
164
165This sections contains a small selection of bugs which are hard to
166fix. For other bugs, see the official bug tracker debbugs.gnu.org.
167
168** Incorrect translation of Super modifier with Ctrl or Meta on OS X
169
170When pressing `M-s-a', Emacs replies "M-s-å is undefined". What
171happened is a mix of Emacs view that Meta and Super has been pressed,
172and OS X view that ALT-a should yield "å".
173
174The bug reports suggests two different patched, unfortunately, none
175work properly. For example:
176
177 Use a Swedish keyboard layout
178
179 (setq ns-alternate-modifier nil)
180
181 "CMD-ALT-9"
182
183Today, this correctly yields that s-] is undefined. With the either
184of the two patches, Emacs responds that s-9 was pressed.
185
186More investigation is needed to fix this problem.
187
188Links:
189- [[http://debbugs.gnu.org/cgi/bugreport.cgi?bug%3D19977][bug#19977]]
190- [[http://debbugs.gnu.org/cgi/bugreport.cgi?bug%3D21330][bug#21330]]
191- [[http://debbugs.gnu.org/cgi/bugreport.cgi?bug%3D21551][bug#21551]]
192
193** Toggline the toolbar in fullheight or maximized modes
194
195The toolbar, in the NS interface, is not considered part of the text
196area. When it is toggled, the Emacs frame change height accordingly.
197
198Unfortunately, this also occurs when the frame is in fullheight or
199maximized modes (N.B. this is not the same as "fullscreen"). The
200effect is that the full frame size either increases (stretching down
201below the lower edge of the screen) or decreases (leaving space
202between the lower edge of the frame and the lower edge of the screen).
203
204A better solution would be for the frame to retain its size,
205i.e. change the text area.
206
207This is related to the `frame-inhibit-implied-resize' issue.
208
209* Internal development features
210
211** Regression test system (or at least a checklist)
212
213Today, after each change to the user interface, Emacs must be manually
214tested. Often, small details are overlooked ("Oh, I didn't test
215toggling the tool-bar in one of the full screen modes, when multiple
216frame were open -- silly me.")
217
218It would be an enormous help if this could be tested automatically.
219Many features are generic, however, the NS interface provides a number
220of unique features.
221
222*** Existing packages
223
224Note that there is a generic UI test named "[[http://debbugs.gnu.org/cgi/bugreport.cgi?bug%3D21415#284][frame-test.el]]". The NS
225interface pass this, with the exception of two toolbar related
226errors.
227
228*** Anders frame test
229
230Anders Lindgren <andlind@gmail.com> has implmented some (very basic)
231tests for full screen, toolbar, and auto-hiding the menu bar.
232
233** Make sure all build variants work
234
235Emacs can be build in a number of different ways. For each feature,
236consider if is really is "NS" specific, or if it should be applied to
237all build versions.
238
239- With the "NS" interface. This is the normal way to build Emacs on
240 OS X.
241
242- With the "X11" interface. On OS X, this is mainly of interest to
243 developers of Emacs to get a "reference" interface implementations.
244 However, it might be of interest for people working remotely, as X11
245 applications can be used over a network connection.
246
247- Console only.