(ls-lisp-insert-directory): Make -B work
[emacs.git] / nextstep / WISHLIST
blob1c4b9e2deb4efcc70334ccc32dd429604874e970
1                              -*- org -*-
3   Wish list for the "NS" OS X Emacs port
4   --------------------------------------
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".
11 * Introduction
13 This is a wishlist for future development of the "NS" Emacs user
14 interface whose primary use is the official Emacs version on OS X.
16 This 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.
19 * Missing features
21 This sections contains features found in other official Emacs ports.
23 ** Support for "xwidget"
25 Emacs 25 has support for "xwidgets", a system to include operating
26 system components into an Emacs buffer.  The components range from
27 simple buttons to "webkit" (effectively, a web browser).
29 Currently, "xwidget" only works for the "gtk+" framework but it is
30 designed to be compatible with multiple Emacs ports.
32 ** Respect `frame-inhibit-implied-resize'
34 When the variable `frame-inhibit-implied-resize' is non-nil, frames
35 should not be resized when operations like changing font or toggling
36 the tool bar is performed.
38 Unfortunately, the tool bar (and possible other operations) always
39 resize the frame.
41 ** Support `proced' (implement `process-attributes')
43 Unfortunately, a user-level process like Emacs does not have the
44 privileges to get information about other processes under OS X.
46 There are other ways to do this:
48  1) Spawn "ps" and parse the output ("ps" has superuser privileges).
50  2) Sign Emacs as part of the distribution process.
52  3) Ask the user to self-sign Emacs, if this feature is of interest.
54 Anders Lindgren <andlind@gmail.com> has implemented
55 `process-attributes' for OS X -- which currently only work when
56 running Emacs as root.
58 [[http://emacsredux.com/blog/2013/05/02/manage-processes-with-proced/][See this article by Bozhidar Batsov for an overview of Proced.]]
60 ** Tooltip properties
62 Tooltip properties like the background color and font are hard wired,
63 even though Emacs allow a user to customize such features.
65 * New features
67 This section contains features unique to the NS and/or OS X.
69 ** PressAndHold for writing accented character
71 On OS X, many application supports the press and hold pattern to
72 invoke a menu of accented characters. (See example at [[https://support.apple.com/en-us/HT201586][Apple]].)
74 Currently, this doesn't work in Emacs.
76 Note that "ns-win.el" explicitly disables this.
78 Note: This feature might not be allowed to be implemented until also
79 implemented in Emacs for a free system.
81 ** Floating scroll bars
83 In modern OS X applications, the scroll bar often float over the
84 content, and is invisible unless actually used.  This makes user
85 interface less cluttered and more area could be used to contain text.
87 With floating scroll bars, the user interface would look like it does
88 when they are disabled today.  However, they will be made visible when
89 a scroll action is initiated, e.g. by putting two fingers on a
90 trackpad.
92 Note: This feature might not be allowed to be implemented until also
93 implemented in Emacs for a free system.
95 * Features from the "mac" port
97 This section contains features available in the "mac" Emacs port.
99 As the "mac" port (as of this writing) isn't an official Emacs port,
100 it might contain features not following the FSF rule "must exist on
101 free systems".
103 The "mac" port is based on the Emacs 22 C-based Carbon interface. It
104 has been maintained in parallel to the official Cocoa-based NS
105 interface. The Carbon interface has been enhanced, and a number of the
106 features of that interface could be implemented NS.
108 ** Smooth scrolling -- maybe not a good idea
110 Today, by default, scrolling with a trackpad makes the text move in
111 steps of five lines. (Scrolling with SHIFT scrolls one line at a
112 time.)
114 The "mac" port provides smooth, pixel-based, scrolling.  This is a very
115 popular features.  However, there are drawbacks to this method: what
116 happens if only a fraction of a line is visible at the top of a
117 window, is the partially visible text considered part of the window or
118 not? (Technically, what should `window-start' return.)
120 An alternative would be to make one-line scrolling the default on NS
121 (or in Emacs in general).
123 Note: This feature might not be allowed to be implemented until also
124 implemented in Emacs for a free system.
126 ** Mouse gestures
128 The "mac" port defines the gestures `swipe-left/right/up/down',
129 `magnify-up/down', and `rotate-left/right'.
131 It also binds the magnification commands to change the font
132 size. (This should be not be done in a specific interface, instead
133 Emacs should do this binding globally.)
135 Note: This feature might not be allowed to be implemented until also
136 implemented in Emacs for a free system.
138 ** Synthesize bold fonts
140 * Open issues
142 This section contains issues where there is an ongoing debate.
144 ** Key bindings of CMD and ALT
146 Currently in the "ns" port, ALT is bound to Meta and CMD is bound to
147 Super -- allowing the user to use typical OS X commands like CMD-A to
148 mark everything.
150 Unfortunately, when using an international keyboard, you can't type
151 normal characters like "(" etc.
153 There are many alternative key bindings. One solution is to bind CMD
154 to Meta and pass ALT to the system.  In fact, this is what Emacs did up
155 to, and including, version 22.  Also, this is how the "mac" port binds
156 the keys.
158 One could envision asymmetrical variants as well, however, this is
159 inappropriate for the default setting.
161 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]].
163 * Bugs
165 This sections contains a small selection of bugs which are hard to
166 fix.  For other bugs, see the official bug tracker debbugs.gnu.org.
168 ** Incorrect translation of Super modifier with Ctrl or Meta on OS X
170 When pressing `M-s-a', Emacs replies "M-s-å is undefined".  What
171 happened is a mix of Emacs view that Meta and Super has been pressed,
172 and OS X view that ALT-a should yield "å".
174 The bug reports suggests two different patched, unfortunately, none
175 work properly.  For example:
177    Use a Swedish keyboard layout
179    (setq ns-alternate-modifier nil)
181    "CMD-ALT-9"
183 Today, this correctly yields that s-] is undefined.  With the either
184 of the two patches, Emacs responds that s-9 was pressed.
186 More investigation is needed to fix this problem.
188 Links:
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]]
193 ** Toggline the toolbar in fullheight or maximized modes
195 The toolbar, in the NS interface, is not considered part of the text
196 area.  When it is toggled, the Emacs frame change height accordingly.
198 Unfortunately, this also occurs when the frame is in fullheight or
199 maximized modes (N.B. this is not the same as "fullscreen").  The
200 effect is that the full frame size either increases (stretching down
201 below the lower edge of the screen) or decreases (leaving space
202 between the lower edge of the frame and the lower edge of the screen).
204 A better solution would be for the frame to retain its size,
205 i.e. change the text area.
207 This is related to the `frame-inhibit-implied-resize' issue.
209 * Internal development features
211 ** Regression test system (or at least a checklist)
213 Today, after each change to the user interface, Emacs must be manually
214 tested.  Often, small details are overlooked ("Oh, I didn't test
215 toggling the tool-bar in one of the full screen modes, when multiple
216 frame were open -- silly me.")
218 It would be an enormous help if this could be tested automatically.
219 Many features are generic, however, the NS interface provides a number
220 of unique features.
222 *** Existing packages
224 Note that there is a generic UI test named "[[http://debbugs.gnu.org/cgi/bugreport.cgi?bug%3D21415#284][frame-test.el]]".  The NS
225 interface pass this, with the exception of two toolbar related
226 errors.
228 *** Anders frame test
230 Anders Lindgren <andlind@gmail.com> has implemented some (very basic)
231 tests for full screen, toolbar, and auto-hiding the menu bar.
233 ** Make sure all build variants work
235 Emacs can be build in a number of different ways.  For each feature,
236 consider if is really is "NS" specific, or if it should be applied to
237 all build versions.
239 - With the "NS" interface.  This is the normal way to build Emacs on
240   OS X.
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.
247 - Console only.