"Fossies" - the Fresh Open Source Software Archive

Member "emacs-26.1/etc/TODO" (23 Apr 2018, 59791 Bytes) of package /linux/misc/emacs-26.1.tar.xz:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "TODO": 25.3_vs_26.1.

    1 Emacs TODO List                                                   -*-outline-*-
    2 
    3 Copyright (C) 2001-2018 Free Software Foundation, Inc.
    4 See the end of the file for license conditions.
    5 
    6 
    7 If you are ready to start working on any of these TODO items, we
    8 appreciate your help; please write to emacs-devel@gnu.org so we can be
    9 aware that the problem is being addressed, and talk with you how to do
   10 it best.  Also to check that it hasn't been done already, since we
   11 don't always remember to update this file!  It is best to consult
   12 the latest version of this file in the Emacs source code repository.
   13 
   14 Since Emacs is an FSF-copyrighted package, please be prepared to sign
   15 legal papers to transfer the copyright on your work to the FSF.
   16 Copyright assignment is a simple process.  Residents of some countries
   17 can do it entirely electronically.  We can help you get started, and
   18 answer any questions you may have (or point you to the people with the
   19 answers), at the emacs-devel@gnu.org mailing list.
   20 
   21 For more information about getting involved, see the CONTRIBUTE file.
   22 
   23 As well as the issues listed here, there are bug reports at
   24 <https://debbugs.gnu.org>.  Bugs tagged "easy" ought to be suitable for
   25 beginners to work on, but unfortunately we are not very good at using
   26 this tag.  Bugs tagged "help" are ones where assistance is required,
   27 but may be difficult to fix.  Bugs with severity "important" or higher
   28 are the ones we consider more important, but these also may be
   29 difficult to fix.  Bugs with severity "minor" may be simpler, but this
   30 is not always true.
   31 
   32 * Speed up Elisp execution
   33 ** Speed up function calls
   34 Change src/bytecode.c so that calls from byte-code functions to byte-code
   35 functions don't go through Ffuncall/funcall_lambda/exec_byte_code but instead
   36 stay within exec_byte_code.
   37 
   38 ** Improve the byte-compiler to recognize immutable (lexical) bindings
   39 and get rid of them if they're used only once and/or they're bound to
   40 a constant expression.
   41 
   42 Such things aren't present in hand-written code, but macro expansion and
   43 defsubst can often end up generating things like
   44 (funcall (lambda (arg) (body)) actual) which then get optimized to
   45 (let ((arg actual)) (body)) but should additionally get optimized further
   46 when 'actual' is a constant/copyable expression.
   47 
   48 ** Add an "indirect goto" byte-code and use it for local lambda expressions.
   49 E.g. when you have code like
   50 
   51    (let ((foo (lambda (x) bar)))
   52      (dosomething
   53       (funcall foo toto)
   54       (blabla (funcall foo titi))))
   55 
   56 turn those 'funcalls' into jumps and their return into indirect jumps back.
   57 
   58 ** Compile efficiently local recursive functions
   59 
   60 Similar to the previous point, we should be able to handle something like
   61 
   62    (letrec ((loop () (blabla) (if (toto) (loop))))
   63      (loop))
   64 
   65 which ideally should generate the same byte-code as
   66 
   67    (while (progn (blabla) (toto)))
   68 
   69 * Things that were planned for Emacs-24
   70 
   71 ** concurrency: including it as an "experimental" compile-time option
   72   sounds good.  Of course there might still be big questions around "which form
   73   of concurrency" we'll want.
   74 ** better support for dynamic embedded graphics: I like this idea (my
   75   mpc.el code could use it for the volume widget), though I wonder if the
   76   resulting efficiency will be sufficient.
   77 ** Spread Semantic.
   78 ** Improve the "code snippets" support: consolidate skeleton.el, tempo.el,
   79   and expand.el (any other?) and then advertise/use/improve it.
   80 ** Improve VC: yes, there's a lot of work to be done there :-(
   81 
   82 ** Random things that cross my mind right now that I'd like to see (some of
   83 them from my local hacks), but it's not obvious at all whether they'll
   84 make it.
   85 *** prog-mode could/should provide a better fill-paragraph default
   86   that uses syntax-tables to recognize string/comment boundaries.
   87 *** provide more completion-at-point-functions.  Make existing
   88   in-buffer completion use completion-at-point.
   89 *** "functional" function-key-map that would make it easy to add (and
   90   remove) mappings like "FOO-mouse-4 -> FOO-scroll-down",
   91   "FOO-tab -> ?\FOO-\t", "uppercase -> lowercase", "[fringe KEY...] ->
   92   [KEY]", "H-FOO -> M-FOO", "C-x C-y FOO -> H-FOO", ...
   93 
   94 * Things related to elpa.gnu.org.
   95 
   96 ** Move idlwave to elpa.gnu.org.
   97 Need to sync up the Emacs and external versions.
   98 See <https://lists.gnu.org/r/emacs-devel/2014-07/msg00008.html>
   99 
  100 ** Move Org mode to elpa.gnu.org.
  101 See <https://lists.gnu.org/r/emacs-devel/2014-08/msg00300.html>
  102 <https://lists.gnu.org/r/emacs-devel/2014-11/msg00257.html>
  103 
  104 ** Move verilog-mode to elpa.gnu.org.
  105 See <https://lists.gnu.org/r/emacs-devel/2015-02/msg01180.html>
  106 
  107 ** Move vhdl-mode to elpa.gnu.org.
  108 See <https://lists.gnu.org/r/emacs-devel/2015-02/msg01180.html>
  109 
  110 * Simple tasks. These don't require much Emacs knowledge, they are
  111 suitable for anyone from beginners to experts.
  112 
  113 ** Convert modes that use view-mode to be derived from special-mode instead.
  114 
  115 ** Major modes should have a menu entry.
  116 
  117 ** Check if all items on the mode-line have a suitable tooltip for all modes.
  118 
  119 ** edebug and debugger-mode should have a toolbar.
  120 It can use the same icons as gud.
  121 
  122 ** Check what minor modes don't use define-minor-mode and convert them
  123 to use it.
  124 
  125 ** Convert all defvars with leading '*' in the doc-strings into defcustoms
  126 of appropriate :type and :group.
  127 
  128 ** Remove any leading '*'s from defcustom doc-strings.
  129 [done?] [A lot of them are in CC Mode.]
  130 
  131 ** Remove unnecessary autoload cookies from defcustoms.
  132 This needs a bit of care, since often people have become used to
  133 expecting such variables to always be defined, eg when they modify
  134 things in their .emacs.
  135 
  136 ** See if other files can use generated-autoload-file (see eg ps-print).
  137 
  138 ** Write more tests.  Pick a fixed bug from the database, write a test
  139 case to make sure it stays fixed.  Or pick your favorite programming
  140 major-mode, and write a test for its indentation.  Or a version
  141 control backend, and write a test for its status parser.  Etc.
  142 See the 'test' directory for examples.
  143 
  144 * Small but important fixes needed in existing features:
  145 
  146 ** Flymake's customization mechanism needs to be both simpler (fewer
  147 levels of indirection) and better documented, so it is easier to
  148 understand.  I find it quite hard to figure out what compilation
  149 command it will use.
  150 
  151 I suggest totally rewriting that part of Flymake, using the simplest
  152 mechanism that suffices for the specific needs.  That will be easy
  153 for users to customize.
  154 
  155 ** Distribute a bar cursor of width > 1 evenly between the two glyphs
  156    on each side of the bar (what to do at the edges?).
  157 
  158 ** revert-buffer should eliminate overlays and the mark.
  159    For related problems consult the thread starting with
  160    https://lists.gnu.org/r/emacs-devel/2005-11/msg01346.html
  161 
  162 ** erase-buffer should perhaps disregard read-only properties of text.
  163 
  164 ** Fix the kill/yank treatment of invisible text.  At the moment,
  165   invisible text is placed in the kill-ring, so that the contents of
  166   the ring may not correspond to the text as displayed to the user.
  167   It ought to be possible to omit text which is invisible (due to a
  168   text-property, overlay, or selective display) from the kill-ring.
  169 
  170 ** Feature to change cursor shape when Emacs is idle (for more than
  171   a specified time).
  172 
  173 ** The buttons at the top of a custom buffer should not omit
  174   variables whose values are currently hidden.
  175 
  176 ** Clean up the variables in browse-url.  Perhaps use a shell command string to
  177   specify the browser instead of the mushrooming set of functions.
  178   See also ESR's proposal for a BROWSER environment variable
  179   <URL:http://www.catb.org/~esr/BROWSER/browse-url.patch>.
  180 
  181 ** Enhance scroll-bar to handle tall line (similar to line-move).
  182 
  183 ** In Custom buffers, put the option that turns a mode on or off first,
  184   using a heuristic of some kind?
  185 
  186 ** Define recompute-arg and recompute-arg-if for fix_command to use.
  187   See rms message of 11 Dec 05 in
  188   https://lists.gnu.org/r/emacs-pretest-bug/2005-12/msg00165.html,
  189   and the rest of that discussion.
  190 
  191 ** In Emacs Info, examples of using Customize should be clickable
  192    and they should create Custom buffers.
  193 
  194 ** The toolbar should show keyboard equivalents in its tooltips.
  195 
  196 ** Add function to redraw the tool bar.
  197 
  198 ** Redesign the load-history data structure so it can cope better
  199   with evaluating definitions of the same function from different files,
  200   recording which file the latest definition came from.
  201 
  202 ** make back_comment use syntax-ppss or equivalent.
  203 
  204 ** Consider improving src/sysdep.c's search for a fqdn.
  205 https://lists.gnu.org/r/emacs-devel/2007-04/msg00782.html
  206 
  207 ** Find a proper fix for rcirc multiline nick adding.
  208 https://lists.gnu.org/r/emacs-devel/2007-04/msg00684.html
  209 
  210 ** Check for any included packages that define obsolete bug-reporting commands.
  211 Change them to use report-emacs-bug.
  212 *** Related functions:
  213 **** gnus-bug
  214 **** report-calc-bug
  215 **** org-submit-bug-report
  216 **** lm-report-bug
  217 **** tramp-bug
  218 **** c-submit-bug-report
  219 [Do all of them need changing?]
  220 
  221 ** Allow fringe indicators to display a tooltip (provide a help-echo property?)
  222 
  223 ** Add a defcustom that supplies a function to name numeric backup files,
  224 like make-backup-file-name-function for non-numeric backup files.
  225 
  226 ** 'dired-mode' should specify the semantics of 'buffer-modified-p' for
  227 dired buffers and DTRT WRT 'auto-revert-mode'.
  228 
  229 ** Check uses of prin1 for error-handling.
  230 https://lists.gnu.org/r/emacs-devel/2008-08/msg00456.html
  231 
  232 * Important features:
  233 
  234 ** "Emacs as word processor"
  235 https://lists.gnu.org/r/emacs-devel/2013-11/msg00515.html
  236     rms writes:
  237     25 years ago I hoped we would extend Emacs to do WYSIWYG word
  238     processing.  That is why we added text properties and variable
  239     width fonts.  However, more features are still needed to achieve this.
  240 
  241 ** Extend text-properties and overlays
  242 *** Several text-property planes
  243 This would get us rid of font-lock-face property (and I'd be happy to
  244 get rid of char-property-alias-alist as well) since font-lock would
  245 simply use the 'face' property in the 'font-lock' plane.
  246 
  247 Basically 'put-text-property' and friends would take an extra argument PLANE
  248 (maybe the best backward-compatible way to do that is to make it so that
  249 PROPERTY can be a cons cell (PLANE . PROP)).  So font-lock would
  250 do (put-text-property start end '(font-lock . face) value).
  251 
  252 All the properties coming from the various planes would get merged via an Elisp
  253 function (so it can merge 'face' differently than 'keymap' or it could give
  254 different priorities to different planes (we could imagine enabling/disabling
  255 planes)).  The merging would not happen lazily while looking up properties but
  256 instead it would take place eagerly in 'add-text-properties'.  This is based on
  257 the idea that it's much more frequent to lookup properties than to
  258 modify them.  Also, when properties are looked up during redisplay, we
  259 generally can't run Elisp code, whereas we generally can do that when
  260 properties are added.
  261 
  262 *** Move overlays to intervals.c
  263 
  264 Currently overlays are implemented as (two) sorted singly linked lists (one
  265 for overlays_before some position and one for overlay_after that
  266 position, for some quirky definition of "before" and "after").
  267 The function 'overlay-recenter' changes the position used for the split
  268 (and is called internally in various situations).
  269 
  270 Each overlay is itself implemented with two markers (which keep track of
  271 the overlay-start and overlay-end).  Markers are implemented as
  272 a non-sorted singly linked list of markers.  So every text
  273 insertion/deletion requires O(N) time, where N is the number of markers
  274 since we have to go down that list to update those markers that are
  275 affected by the modification.
  276 
  277 You can start in src/buffer.[ch], maybe grepping for overlays_before for
  278 a starting point.
  279 
  280 Text-properties, OTOH, are implemented with a (mostly) balanced binary
  281 tree.  This is implemented in src/intervals.[ch].
  282 
  283 So we'd like to change overlays so that they don't use markers (and we
  284 don't keep them in two sorted singly-linked lists) any more.  Instead,
  285 we'll store them inside the balanced binary tree used for
  286 text-properties.  I think we can use the "augmented tree" approach
  287 described in https://en.wikipedia.org/wiki/Interval_tree.
  288 
  289 To ease up debugging during development, I'd guess the implementation
  290 would first add the new stuff, keeping the old stuff (i.e. add to
  291 Lisp_Overlay whichever fields are needed for the new code, while keeping
  292 the old ones, add needed overlay fields to the intervals tree, but keep
  293 the old fields, the overlays_before etc...).  This way, you can add
  294 consistency checks that make sure the new code computes the same results
  295 as the old code.  And once that works well, we can remove the old code
  296 and old fields.
  297 
  298 ** Having tabs above a window to switch buffers in it.
  299 
  300 ** "Perspectives" are named persistent window configurations.  We have
  301 had the window configuration mechanism in GNU Emacs since the
  302 beginning but we have never developed a good user interface to take
  303 advantage of them.  Eclipse's user interface seems to be good.
  304 
  305 Perspectives work well even if you do the equivalent of C-x 4 C-f
  306 because of the distinction between view windows vs file windows.  In
  307 Emacs this is more or less the "dedicated window" feature, but we have
  308 never really made it work for this.
  309 
  310 Perspectives also need to interact with the tabs.
  311 
  312 ** FFI (foreign function interface)
  313 See eg https://lists.gnu.org/r/emacs-devel/2013-10/msg00246.html
  314 
  315 One way of doing this is to start with fx's dynamic loading, and use it
  316 to implement things like auto-loaded buffer parsers and database
  317 access in cases which need more than Lisp.
  318 
  319 ** Replace unexec with a more portable form of dumping
  320 See eg https://lists.gnu.org/r/emacs-devel/2014-01/msg01034.html
  321        https://lists.gnu.org/r/emacs-devel/2014-06/msg00452.html
  322 
  323 One way is to provide portable undumping using mmap (per gerd design).
  324 
  325 ** Imenu could be extended into a file-structure browsing mechanism
  326 using code like that of customize-groups.
  327 
  328 ** Display something in the margin on lines that have compilation errors.
  329 
  330 ** Compilation error navigation bar, parallel to the scroll bar,
  331 indicating where in the buffer there are compilation errors.
  332 Perhaps we could arrange to display these error indications on top
  333 of the scroll bar itself.  That depends on to what extent toolkit
  334 scroll bars are extensible.
  335 
  336 ** Provide user-friendly ways to list all available font families,
  337   list fonts, display a font as a sample, etc.  [fx is looking at
  338   multilingual font selection for the Unicode branch of Emacs.]
  339 
  340 ** Provide a convenient way to select a color with the mouse.
  341 
  342 ** Rewrite the face code to be simpler, clearer and faster.
  343 
  344 ** Program Enriched mode to read and save in RTF.  [Is there actually a
  345   decent single definition of RTF?  Maybe see info at
  346   http://latex2rtf.sourceforge.net/.]  This task seems to be addressed
  347   by https://savannah.nongnu.org/projects/emacs-rtf/, which is still in
  348   very early stages.
  349 
  350   Another place to look is the Wikipedia article at
  351   http://en.wikipedia.org/wiki/Rich_Text_Format
  352 
  353   It currently points to the latest spec of RTF v1.9.1 at
  354   http://www.microsoft.com/en-us/download/details.aspx?id=10725
  355 
  356 ** Implement primitive and higher-level functions to allow filling
  357   properly with variable-pitch faces.
  358 
  359 ** Implement intelligent search/replace, going beyond query-replace
  360   (see http://groups.csail.mit.edu/uid/projects/clustering/chi04.pdf).
  361 
  362 ** Implement other text formatting properties.
  363 *** Footnotes that can appear either in place or at the end of the page.
  364 *** text property that says "don't break line in middle of this".
  365    Don't break the line between two characters that have the
  366    same value of this property.
  367 *** Discretionary hyphens that are not visible when they are at end of line.
  368 
  369 ** Internationalize Emacs's messages.
  370 
  371 ** Set up a facility to save backtraces when errors happen during
  372 specified filters, specified timers, and specified hooks.
  373 
  374 ** Install mmc@maruska.dyndns.org's no-flicker change.
  375 
  376 ** Add a "current vertical pixel level" value that goes with point,
  377   so that motion commands can also move through tall images.
  378   This value would be to point as window-vscroll is to window-start.
  379 
  380 ** Address internationalization of symbols names essentially
  381   as documentation, e.g. in command names and Custom.
  382 
  383 ** Make the Lucid menu widget display multilingual text.  [This
  384   probably needs to be done from actual Emacs buffers, either directly
  385   in the menu or by rendering in an unmapped window and copying the
  386   pixels.  The current code assumes a specific locale; that isn't good
  387   enough even if X can render the arbitrary text] [The gtk
  388   port now displays multilingual text in menus, but only insofar as
  389   Emacs can encode it as utf-8 and gtk can display the result.]
  390   Maybe making Lucid menus work like Gtk's (i.e. just force utf-8) is good
  391   enough now that Emacs can encode most chars into utf-8.
  392 
  393 ** The GNUstep port needs some serious attention, ideally from someone
  394 familiar with GNUstep and Objective C.
  395 
  396 * Other features we would like:
  397 
  398 ** A more modern printing interface.  One that pops up a dialog that lets
  399 you choose printer, page style, etc.
  400 Integration with the Gtk print dialog is apparently difficult.  See eg:
  401 https://lists.gnu.org/r/emacs-devel/2009-03/msg00501.html
  402 https://lists.gnu.org/r/emacs-devel/2009-04/msg00034.html
  403 
  404 ** Allow frames(terminals) created by emacsclient to inherit their environment
  405 from the emacsclient process.
  406 
  407 ** Give Tar mode all the features of Archive mode.
  408 
  409 ** Create a category of errors called 'process-error'
  410   for some or all errors associated with using subprocesses.
  411 
  412 ** Maybe reinterpret 'parse-error' as a category of errors
  413   and put some other errors under it.
  414 
  415 ** Make byte-compile warn when a doc string is too wide.
  416 
  417 ** Make byte-optimization warnings issue accurate line numbers.
  418 
  419 ** Record the sxhash of the default value for customized variables
  420   and notify the user (maybe by adding a menu item or toolbar button,
  421   as the detection can occur during autoload time) when the default
  422   changes (meaning that new versions of the Lisp source with a changed
  423   default value got installed) and offer ediff on the respective
  424   customization buffers.
  425 
  426 ** Emacs Lisp mode could put an overlay on the defun for every
  427   function that has advice.  The overlay could have 'after-text' like
  428   " [Function has advice]".  It might look like (defun foo [Function
  429   has advice] (x y) The overlay could also be a button that you could
  430   use to view the advice.
  431 
  432 ** Add a function to get the insertion-type of the markers in an overlay.
  433 
  434 ** ange-ftp
  435 *** understand sftp
  436    This is hard to make work because sftp doesn't print status messages.
  437 
  438 *** Use MLS for ange-ftp-insert-directory if a list of files is specified.
  439 
  440 ** Ability to map a key, including all modified-combinations.
  441    E.g map mouse-4 to wheel-up as well as M-mouse-4 -> M-wheel-up
  442    M-C-mouse-4 -> M-C-wheel-up, H-S-C-M-s-double-mouse-4 ->
  443    H-S-C-M-s-double-wheel-up, ...
  444 
  445 ** Beefed-up syntax-tables.
  446 *** recognize multi-character syntactic entities like 'begin' and 'end'.
  447 *** nested string-delimiters (for PostScript's (foo(bar)baz) strings).
  448 *** support for infix operators (with precedence).
  449 *** support for the $ (paired delimiter) in parse-partial-sexp.
  450 *** support for hook-chars whose effect on the parsing-state is specified
  451 	by elisp code.  Thus a char could both close a string and open a comment
  452 	at the same time and do it in a context-sensitive way.
  453 *** ability to add mode-specific data to the partial-parse-state.
  454 
  455 ** Add a way to convert a keyboard macro to equivalent Lisp code.
  456 
  457 ** Have a command suggestion help system that recognizes patterns
  458   of commands which could be replaced with a simpler common command.
  459   It should not make more than one suggestion per 10 minutes.
  460 
  461 ** Add a way to define input methods by computing them (when first used)
  462   from other input methods.  Then redefine C-x 8 to use a
  463   user-selected input method, with the default being the union of
  464   latin-1-prefix and latin-1-postfix.
  465 
  466 ** Implement a clean way to use different major modes for
  467   different parts of a buffer.  This could be useful in editing
  468   Bison input files, for instance, or other kinds of text
  469   where one language is embedded in another language.  See
  470   http://www.loveshack.ukfsn.org/emacs/multi-mode.el and also
  471   mmm-mode, as reference for approaches taken by others.
  472 
  473 ** Arrange a way for an input method to return the first character
  474   immediately, then replace it later.  So that C-s a with
  475   input method latin-1-postfix would immediately search for an a.
  476 
  477 ** Give start-process the ability to direct standard-error
  478   output to a different filter.
  479 
  480 ** Give desktop.el a feature to switch between different named desktops.
  481 
  482 ** Add a cpio mode, more or less like tar mode.
  483 
  484 ** Save undo information in special temporary files, and reload it
  485   when needed for undoing.  This could extend undo capacity.
  486   undo-tree, in ELPA, already does this; its saving code could be
  487   integrated without requiring the use of undo-tree.
  488 
  489 ** Change the Windows NT menu code
  490   so that it handles the deep_p argument and avoids
  491   regenerating the whole menu bar menu tree except
  492   when the user tries to use the menubar.
  493 
  494   This requires the RIT to forward the WM_INITMENU message to
  495   the main thread, and not return from that message until the main
  496   thread has processed the MENU_BAR_ACTIVATE_EVENT and regenerated
  497   the whole menu bar.  In the mean time, it should process other messages.
  498 
  499 ** Get some major packages installed: W3 (development version needs
  500   significant work), PSGML, _possibly_ ECB.
  501   https://lists.gnu.org/r/emacs-devel/2007-05/msg01493.html
  502   Check the assignments file for other packages which might go in and
  503   have been missed.
  504 
  505 ** Make compiler warnings about functions that might be undefined at run time
  506  smarter, so that they know which files are required by the file being
  507  compiled and don't warn about functions defined in them.
  508 
  509 ** Split out parts of lisp.h.
  510 
  511 ** Update the FAQ.
  512 
  513 ** Allow auto-compression-mode to use zlib calls if zlib is available.
  514   [It's required for PNG, so may be linked anyhow.]
  515 
  516 ** Improve the GC (generational, incremental).  (We may be able to use
  517   the Boehm collector.)  [See the Boehm-GC branch in CVS for work on this.]
  518 
  519 ** Check what hooks would help Emacspeak -- see the defadvising in W3.
  520 
  521 ** Add definitions for symbol properties, for documentation purposes.
  522 
  523 ** Temporarily remove scroll bars when they are not needed, typically
  524   when a buffer can be fully displayed in its window.
  525 
  526 ** Provide an optional feature which computes a scroll bar slider's
  527   size and its position from lines instead of characters.
  528 
  529 ** Allow unknown image types to be rendered via an external program
  530   converting them to, say, PBM (in the same way as PostScript?). [does
  531   doc-view.el do this, or could it be extended to do this?
  532   Does ImageMagick obsolete this idea?]
  533 
  534 ** Allow displaying an X window from an external program in a buffer,
  535   e.g. to render graphics from Java applets.  [gerd and/or wmperry
  536   thought this was feasible.]
  537 
  538 ** Allow images (not just text) in the margin to be mouse-sensitive.
  539   (Requires recursing through display properties).  Provide some way
  540   to simulate mouse-clicks on marginal text without a mouse.
  541 
  542 ** Extend ps-print to deal with multiple font sizes, images, and extra
  543   encodings.
  544 
  545 ** Use the XIE X extension, if available, for image display.
  546 
  547 ** Make monochrome images display using the foreground and background
  548   colors of the applicable faces.
  549 
  550 ** Make 'format-time-string' preserve text properties like 'format'.
  551 
  552 ** Optionally make the cursor a little thinner at the end of a line
  553   or the end of the buffer.
  554 
  555 ** Port the conservative stack marking code of Emacs's garbage collector
  556   to more systems, so that we can completely get rid of GCPROs.  Note
  557   that Boehm garbage collector provides this.
  558 
  559 ** Reorder defcustom's in each package so that the more important
  560   options come first in the Customize buffers.  This could be done by
  561   either rearranging the file (since options are shown in the order
  562   they appear in the *.el files), or by adding a few :set-after attributes.
  563 
  564 ** Maybe document the features of libraries missing from the manual (or
  565   ancillary manuals, including the Lisp manual in some cases).
  566   This is not worth doing for all of these packages and we need not
  567   aim for completeness, but some may be worth documenting.
  568 
  569   Here's a list which is probably not complete/correct: align, allout,
  570   artist, ansi-color, array, calculator, cdl, cmuscheme,
  571   completion, delim-col, dirtrack, double, echistory, elide-head,
  572   easymenu, expand, flow-ctrl, format [format-alist],
  573   generic/generic-x [various modes], kermit, log-edit,
  574   makesum, midnight [other than in Kill Buffer node],
  575   mouse-copy [?], mouse-drag, mouse-sel, net-utils, rcompile,
  576   snmp-mode [?], soundex [should be interactive?], strokes [start from
  577   the web page], talk, thingatpt [interactive functions?], type-break,
  578   vcursor, xscheme, zone-mode [?], mlconvert [?], iso-cvt,
  579   feedmail [?], uce, gametree, page-ext,
  580   refbib, refer, scribe, texinfo, underline,
  581   cmacexp, hideif, mantemp [obsolete?], pcomplete, xml,
  582   cvs-status (should be described in PCL-CVS manual); other progmodes,
  583   probably in separate manual.
  584 
  585 ** Convert the XPM bitmaps to PPM, replace the PBMs with them and scrap
  586   the XPMs so that the color versions work generally.  (Requires care
  587   with the color used for the transparent regions.)
  588 
  589 ** Convenient access to the 'values' variable.  It would be nice to have an
  590   interface that would show you the printed reps of the elements of the
  591   list in a menu, let you select one of the values, and put it into some
  592   other variable, without changing the value of 'values'.
  593 
  594 ** (Controlled by a flag) make open and close syntax match exactly,
  595   i.e. '(' doesn't match ']'.
  596 
  597 ** Specify parameter ID-FORMAT in all calls to 'file-attributes' and
  598   'directory-files-and-attributes' where attributes UID or GID are used.
  599   Whenever possible, use value 'string.
  600   When done, change meaning of default value from 'integer to 'string.
  601   If value 'integer is used nowhere, remove the parameter ID-FORMAT from
  602   the definition of 'file-attributes' and 'directory-files-and-attributes'
  603   and from the calls.
  604 
  605 ** Make language-info-alist customizable.  Currently a user can customize
  606   only the variable 'current-language-environment'.
  607 
  608 ** Improve language environment handling so that Emacs can fit
  609   better to a users locale.  Currently Emacs uses utf-8 language
  610   environment for all utf-8 locales, thus a user in ja_JP.UTF-8 locale
  611   are also put in utf-8 lang. env.  In such a case, it is
  612   better to use Japanese lang. env. but prefer utf-8 coding system.
  613 
  614 ** Enhance locale handling:  handle language, territory and charset
  615   orthogonally and de-emphasize language environments.  Use the locale
  616   to set up more things, such as fontsets, the default Ispell
  617   dictionary, diary format, calendar holidays and display, quoting
  618   characters and phrase boundaries, sentence endings, collation for
  619   sorting (at least for unicodes), HTTP Accept-language, patterns for
  620   directory listings and compilation messages, yes-or-no replies,
  621   common menu items when the toolkit supports it ...  'locale-info'
  622   needs extending for LC_COLLATE &c.  [fx started on this.]
  623 
  624 ** Eliminate the current restriction on header printing by ps-print.
  625   Currently, a header can contain only single 1-byte charset in
  626   addition to ASCII.
  627 
  628 ** In ps-print, provide an user friendly interface to specify fonts.
  629 
  630 ** Enhance word boundary detection for such a script that doesn't use
  631   space at word boundary (e.g. Thai).
  632 
  633 ** Implement interface programs with major Japanese conversion server
  634   in lib-src so that they can be used from the input method
  635   "japanese".  Currently, most Japanese users are using external
  636   packages (e.g. tamago, anthy) or an input method via XIM.
  637 
  638 ** Let LEIM handle the Mode_switch key like XIM does (i.e. a toggle like C-\
  639    but which can also be used as a modifier).
  640 
  641 ** Improve Help buffers: Change the face of previously visited links (like
  642    Info, but also with regard to namespace), and give the value of
  643    lisp expressions, e.g auto-mode-alist, the right face.
  644 
  645 ** Possibly make 'list-holidays' eval items in the calendar-holidays variable.
  646    See thread
  647    <https://lists.gnu.org/r/emacs-devel/2006-02/msg01034.html>.
  648    [rgm@gnu.org will look at this after 22.1]
  649 
  650 ** Possibly make cal-dst use the system timezone database directly.
  651    See thread
  652    <https://lists.gnu.org/r/emacs-pretest-bug/2006-11/msg00060.html>
  653 
  654 ** Possibly add a "close" button to the modeline.
  655    The idea is to add an "X" of some kind, that when clicked deletes
  656    the window associated with that modeline.
  657    https://lists.gnu.org/r/emacs-devel/2007-09/msg02416.html
  658 
  659 * Things to be done for specific packages or features
  660 
  661 ** NeXTstep port
  662 
  663 *** Missing features
  664 
  665 This sections contains features found in other official Emacs ports.
  666 
  667 **** Support for xwidgets
  668 
  669 Emacs 25 has support for xwidgets, a system to include operating
  670 system components into an Emacs buffer.  The components range from
  671 simple buttons to webkit (effectively, a web browser).
  672 
  673 Currently, xwidgets works only for the gtk+ framework but it is
  674 designed to be compatible with multiple Emacs ports.
  675 
  676 **** Respect 'frame-inhibit-implied-resize'
  677 
  678 When the variable 'frame-inhibit-implied-resize' is non-nil, frames
  679 should not be resized when operations like changing font or toggling
  680 the tool bar is performed.
  681 
  682 Unfortunately, the tool bar (and possible other operations) always
  683 resize the frame.
  684 
  685 **** Support 'proced' (implement 'process-attributes')
  686 
  687 Unfortunately, a user-level process like Emacs does not have the
  688 privileges to get information about other processes under macOS.
  689 
  690 There are other ways to do this:
  691 
  692  1) Spawn "ps" and parse the output ("ps" has superuser privileges).
  693 
  694  2) Sign Emacs as part of the distribution process.
  695 
  696  3) Ask the user to self-sign Emacs, if this feature is of interest.
  697 
  698 Anders Lindgren <andlind@gmail.com> has implemented
  699 'process-attributes' for macOS, which currently only work when
  700 running Emacs as root.
  701 
  702 See this article by Bozhidar Batsov for an overview of Proced:
  703 http://emacsredux.com/blog/2013/05/02/manage-processes-with-proced/
  704 
  705 **** Tooltip properties
  706 
  707 Tooltip properties like the background color and font are hard-wired,
  708 even though Emacs allows a user to customize such features.
  709 
  710 *** New features
  711 
  712 This section contains features unique to Nextstep and/or macOS.
  713 
  714 **** PressAndHold for writing accented character
  715 
  716 On macOS, many application support the press and hold pattern to
  717 invoke a menu of accented characters.  (See example at
  718 https://support.apple.com/en-us/HT201586 .)
  719 
  720 Currently, this doesn't work in Emacs.
  721 
  722 Note that "ns-win.el" explicitly disables this.
  723 
  724 Note: This feature might not be allowed to be implemented until also
  725 implemented in Emacs for a free system.
  726 
  727 **** Floating scroll bars
  728 
  729 In modern macOS applications, the scroll bar often floats over the
  730 content, and is invisible unless actually used.  This makes the user
  731 interface less cluttered and more area could be used to contain text.
  732 
  733 With floating scroll bars, the user interface would look like it does
  734 when they are disabled today.  However, they will be made visible when
  735 a scroll action is initiated, e.g. by putting two fingers on a
  736 trackpad.
  737 
  738 Note: This feature might not be allowed to be implemented until also
  739 implemented in Emacs for a free system.
  740 
  741 *** Features from the "mac" port
  742 
  743 This section contains features available in the "mac" Emacs port.
  744 
  745 As the "mac" port (as of this writing) isn't an official Emacs port,
  746 it might contain features not following the FSF rule "must exist on
  747 free systems".
  748 
  749 The "mac" port is based on the Emacs 22 C-based Carbon interface.
  750 It has been maintained in parallel to the official Cocoa-based NS
  751 interface.  The Carbon interface has been enhanced, and a number of the
  752 features of that interface could be implemented NS.
  753 
  754 **** Smooth scrolling -- maybe not a good idea
  755 
  756 Today, by default, scrolling with a trackpad makes the text move in
  757 steps of five lines.  (Scrolling with SHIFT scrolls one line at a time.)
  758 
  759 The "mac" port provides smooth, pixel-based, scrolling.  This is a very
  760 popular features.  However, there are drawbacks to this method: what
  761 happens if only a fraction of a line is visible at the top of a
  762 window, is the partially visible text considered part of the window or
  763 not?  (Technically, what should 'window-start' return.)
  764 
  765 An alternative would be to make one-line scrolling the default on NS
  766 (or in Emacs in general).
  767 
  768 Note: This feature might not be allowed to be implemented until also
  769 implemented in Emacs for a free system.
  770 
  771 **** Mouse gestures
  772 
  773 The "mac" port defines the gestures 'swipe-left/right/up/down',
  774 'magnify-up/down', and 'rotate-left/right'.
  775 
  776 It also binds the magnification commands to change the font
  777 size.  (This should be not be done in a specific interface, instead
  778 Emacs should do this binding globally.)
  779 
  780 Note: This feature might not be allowed to be implemented until also
  781 implemented in Emacs for a free system.
  782 
  783 **** Synthesize bold fonts
  784 
  785 *** Open issues
  786 
  787 This section contains issues where there is an ongoing debate.
  788 
  789 **** Key bindings of CMD and ALT
  790 
  791 Currently in the "ns" port, ALT is bound to Meta and CMD is bound to
  792 Super -- allowing the user to use typical macOS commands like CMD-A to
  793 mark everything.
  794 
  795 Unfortunately, when using an international keyboard, you can't type
  796 normal characters like "(" etc.
  797 
  798 There are many alternative key bindings.  One solution is to bind CMD
  799 to Meta and pass ALT to the system.  In fact, this is what Emacs did up
  800 to, and including, version 22.  Also, this is how the "mac" port binds
  801 the keys.
  802 
  803 One could envision asymmetrical variants as well, however, this is
  804 inappropriate for the default setting.
  805 
  806 See the discussion on emacs-devel:
  807 https://lists.gnu.org/r/emacs-devel/2015-12/msg01575.html
  808 https://lists.gnu.org/r/emacs-devel/2016-01/msg00008.html
  809 
  810 *** Internal development features
  811 
  812 **** Regression test system (or at least a checklist)
  813 
  814 Today, after each change to the user interface, Emacs must be manually
  815 tested.  Often, small details are overlooked ("Oh, I didn't test
  816 toggling the tool-bar in one of the full screen modes, when multiple
  817 frame were open -- silly me.")
  818 
  819 It would be an enormous help if this could be tested automatically.
  820 Many features are generic, however, the NS interface provides a number
  821 of unique features.
  822 
  823 **** Existing packages
  824 
  825 Note that there is a generic UI test named frame-test.el, see
  826 https://debbugs.gnu.org/21415#284 .
  827 The NS interface passes this, with the exception of two toolbar-related errors.
  828 
  829 **** Anders frame test
  830 
  831 Anders Lindgren <andlind@gmail.com> has implemented some (very basic)
  832 tests for full screen, toolbar, and auto-hiding the menu bar.
  833 
  834 **** Make sure all build variants work
  835 
  836 Emacs can be build in a number of different ways.  For each feature,
  837 consider if is really is "NS" specific, or if it should be applied to
  838 all build versions.
  839 
  840 - With the "NS" interface.  This is the normal way to build Emacs on
  841   macOS.
  842 
  843 - With the "X11" interface.  On macOS, this is mainly of interest to
  844   developers of Emacs to get a "reference" interface implementations.
  845   However, it might be of interest for people working remotely, as X11
  846   applications can be used over a network connection.
  847 
  848 - Console only.
  849 
  850 *** Bugs
  851 
  852 **** Incorrect translation of Super modifier with Ctrl or Meta on macOS
  853 
  854 When pressing 'M-s-a', Emacs replies "M-s-å is undefined".  What
  855 happened is a mix of Emacs view that Meta and Super has been pressed,
  856 and macOS view that ALT-a should yield "å" (U+00E5 LATIN SMALL LETTER
  857 A WITH RING ABOVE).
  858 
  859 The bug reports suggest two different patches; unfortunately, neither
  860 works properly.  For example:
  861 
  862    Use a Swedish keyboard layout
  863 
  864    (setq ns-alternate-modifier nil)
  865 
  866    "CMD-ALT-9"
  867 
  868 Today, this correctly yields that s-] is undefined.  With either
  869 of the two patches, Emacs responds that s-9 was pressed.
  870 
  871 More investigation is needed to fix this problem.
  872 
  873 Links:
  874 - https://debbugs.gnu.org/19977
  875 - https://debbugs.gnu.org/21330
  876 - https://debbugs.gnu.org/21551
  877 
  878 **** Toggling the toolbar in fullheight or maximized modes
  879 
  880 The toolbar, in the NS interface, is not considered part of the text
  881 area.  When it is toggled, the Emacs frame change height accordingly.
  882 
  883 Unfortunately, this also occurs when the frame is in fullheight or
  884 maximized modes (N.B. this is not the same as "fullscreen").  The
  885 effect is that the full frame size either increases (stretching down
  886 below the lower edge of the screen) or decreases (leaving space
  887 between the lower edge of the frame and the lower edge of the screen).
  888 
  889 A better solution would be for the frame to retain its size,
  890 i.e. change the text area.
  891 
  892 This is related to the 'frame-inhibit-implied-resize' issue.
  893 
  894 **** The event loop does not redraw.
  895 A problem is that redraw don't happen during resize,
  896 because we can't break out from the NSapp loop during resize.
  897 There was a special trick to detect mouse press in the lower right
  898 corner and track mouse movements, but this did not work well, and was
  899 not scalable to the new Lion "resize on every window edge" behavior.
  900 [As of trunk r109635, 2012-08-15, the event loop no longer polls.]
  901 
  902 **** (mouse-avoidance-mode 'banish) then minimize Emacs, will pop window back
  903 up on top of all others (probably fixed in bug#17439)
  904 
  905 **** free_frame_resources, face colors
  906 
  907 **** Numeric keysetting bug.
  908 
  909 *** Mac-related
  910 
  911 **** Open file:/// URLs.
  912 
  913 **** Put frame autopositioning into C code somewhere -- if loc = same, offset.
  914 
  915 **** Automap ctrl-mouse-1 to mouse-3.
  916 
  917 **** Deal with Finder aliases somehow.
  918 
  919 **** Ctrl-F2 won't pull up menus.
  920 
  921 *** Other / Low Priority:
  922 
  923 **** Better recognition of Unicode scripts / Greek / composition.
  924 
  925 **** Undo for color-drag face customization.
  926 
  927 ** Bidirectional editing
  928 
  929 *** Support reordering structured text
  930 Two important use cases: (1) comments and strings in program sources,
  931 and (2) text with markup, like HTML or XML.
  932 
  933 One idea is to invent a special text property that would instruct the
  934 display engine to reorder only the parts of buffer text covered by
  935 that property.  The display engine will then push its state onto the
  936 iterator stack, restrict the bidi iterator to accessing only the
  937 portion of buffer text covered by the property, reorder the text, then
  938 pop its state from stack and continue as usual.  This will require
  939 minor changes in the bidi_it structure.
  940 
  941 This design requires Lisp-level code to put the text properties on the
  942 relevant parts of the buffer text.  That could be done using JIT
  943 fontifications, or as a preliminary processing when the file is
  944 visited.  With HTML/XML, the code that puts text properties needs to
  945 pay attention to the bidi directives embedded in the HTML/XML stream.
  946 
  947 *** Allow the user to control the direction of the UI
  948 
  949 **** Introduce user option to control direction of mode line.
  950 One problem is the header line, which is produced by the same routines
  951 as the mode line.  While it makes sense to have the mode-line
  952 direction controlled by a single global variable, header lines are
  953 buffer-specific, so they need a separate treatment in this regard.
  954 
  955 **** User options to control direction of menu bar and tool bar.
  956 For the tool bar, it's relatively easy: set it.paragraph_embedding
  957 in redisplay_tool_bar according to the user variable, and make
  958 f->desired_tool_bar_string multibyte with STRING_SET_MULTIBYTE.  Some
  959 minor changes will be needed to set the right_box_line_p and
  960 left_box_line_p flags correctly for the R2L tool bar.
  961 
  962 However, it makes no sense to display the tool bar right to left if
  963 the menu bar cannot be displayed in the same direction.
  964 
  965 R2L menu bar is tricky for the same reasons as the mode line.  In
  966 addition, toolkit builds create their menu bars in toolkit-specific
  967 parts of code, bypassing xdisp.c, so those parts need to be enhanced
  968 with toolkit-specific code to display the menu bar right to left.
  969 
  970 ** Custom
  971 
  972 *** Extend :set-after to also mean initialize after.
  973 If defcustom A specifies :set-after '(B), then if a user customizes
  974 both A and B, custom will set A after B.  But if the user only customizes
  975 A, then if B is already defined, it gets left at its original setting.
  976 Instead, if B has not been customized it should be re-initialized
  977 (on the assumption that the default value depends on A).
  978 See the places where we manually call custom-reevaluate-setting,
  979 such as for mail-host-address and user-mail-address in startup.el.
  980 
  981 ** ImageMagick support
  982 
  983 *** image-type-header-regexps priorities the jpeg loader over the
  984 ImageMagick one.  This is not wrong, but how should a user go about
  985 preferring the ImageMagick loader?  The user might like zooming etc in jpegs.
  986 
  987 Try (setq image-type-header-regexps nil) for a quick hack to prefer
  988 ImageMagick over the jpg loader.
  989 
  990 *** For some reason it's unbearably slow to look at a page in a large
  991 image bundle using the :index feature.  The ImageMagick "display"
  992 command is also a bit slow, but nowhere near as slow as the Emacs
  993 code.  It seems ImageMagick tries to unpack every page when loading the
  994 bundle.  This feature is not the primary usecase in Emacs though.
  995 
  996 ImageMagick 6.6.2-9 introduced a bugfix for single page djvu load.  It
  997 is now much faster to use the :index feature, but still not very fast.
  998 
  999 *** Try to cache the num pages calculation.  It can take a while to
 1000 calculate the number of pages, and if you need to do it for each page
 1001 view, page-flipping becomes uselessly slow.
 1002 
 1003 *** Integrate with image-dired.
 1004 
 1005 *** Integrate with docview.
 1006 
 1007 *** Integrate with image-mode.
 1008 Some work has been done, e.g. M-x image-transform-fit-to-height will
 1009 fit the image to the height of the Emacs window.
 1010 
 1011 *** Look for optimizations for handling images with low depth.
 1012 Currently the code seems to default to 24 bit RGB which is costly for
 1013 images with lower bit depth.
 1014 
 1015 *** Decide what to do with some uncommitted imagemagick support
 1016 functions for image size etc.
 1017 
 1018 ** nxml mode
 1019 
 1020 *** High priority
 1021 
 1022 **** Command to insert an element template, including all required
 1023 attributes and child elements.  When there's a choice of elements
 1024 possible, we could insert a comment, and put an overlay on that
 1025 comment that makes it behave like a button with a pop-up menu to
 1026 select the appropriate choice.
 1027 
 1028 **** Command to tag a region.  With a schema should complete using legal
 1029 tags, but should work without a schema as well.
 1030 
 1031 **** Provide a way to conveniently rename an element.  With a schema should
 1032 complete using legal tags, but should work without a schema as well.
 1033 
 1034 *** Outlining
 1035 
 1036 **** Implement C-c C-o C-q.
 1037 
 1038 **** Install pre/post command hook for moving out of invisible section.
 1039 
 1040 **** Put a modify hook on invisible sections that expands them.
 1041 
 1042 **** Integrate dumb folding somehow.
 1043 
 1044 **** An element should be able to be its own heading.
 1045 
 1046 **** Optimize to avoid complete buffer scan on each command.
 1047 
 1048 **** Make it work with HTML-style headings (i.e. level indicated by
 1049 name of heading element rather than depth of section nesting).
 1050 
 1051 **** Recognize root element as a section provided it has a title, even
 1052 if it doesn't match section-element-name-regex.
 1053 
 1054 **** Support for incremental search automatically making hidden text visible.
 1055 
 1056 **** Allow title to be an attribute.
 1057 
 1058 **** Command that says to recognize the tag at point as a section/heading.
 1059 
 1060 **** Explore better ways to determine when an element is a section
 1061 or a heading.
 1062 
 1063 **** rng-next-error needs to either ignore invisible portion or reveal it
 1064 (maybe use isearch oriented text properties).
 1065 
 1066 **** Errors within hidden section should be highlighted by underlining the
 1067 ellipsis.
 1068 
 1069 **** Make indirect buffers work.
 1070 
 1071 **** How should nxml-refresh outline recover from non well-formed tags?
 1072 
 1073 **** Hide tags in title elements?
 1074 
 1075 **** Use overlays instead of text properties for holding outline state?
 1076 Necessary for indirect buffers to work?
 1077 
 1078 **** Allow an outline to go in the speedbar.
 1079 
 1080 **** Split up outlining manual section into subsections.
 1081 
 1082 **** More detail in the manual about each outlining command.
 1083 
 1084 **** More menu entries for hiding/showing?
 1085 
 1086 **** Indication of many lines have been hidden?
 1087 
 1088 *** Locating schemas
 1089 
 1090 **** Should rng-validate-mode give the user an opportunity to specify a
 1091 schema if there is currently none? Or should it at least give a hint
 1092 to the user how to specify a non-vacuous schema?
 1093 
 1094 **** Support for adding new schemas to schema-locating files.
 1095 Add documentElement and namespace elements.
 1096 
 1097 **** C-c C-w should be able to report current type id.
 1098 
 1099 **** Implement doctypePublicId.
 1100 
 1101 **** Implement typeIdBase.
 1102 
 1103 **** Implement typeIdProcessingInstruction.
 1104 
 1105 **** Support xml:base.
 1106 
 1107 **** Implement group.
 1108 
 1109 **** Find preferred prefix from schema-locating files.  Get rid of
 1110 rng-preferred-prefix-alist.
 1111 
 1112 **** Inserting document element with vacuous schema should complete using
 1113 document elements declared in schema locating files, and set schema
 1114 appropriately.
 1115 
 1116 **** Add a ruleType attribute to the <include> element?
 1117 
 1118 **** Allow processing instruction in prolog to contain the compact syntax
 1119 schema directly.
 1120 
 1121 **** Use RDDL to locate a schema based on the namespace URI.
 1122 
 1123 **** Should not prompt to add redundant association to schema locating file.
 1124 
 1125 **** Command to reload current schema.
 1126 
 1127 *** Schema-sensitive features
 1128 
 1129 **** Should filter dynamic markup possibilities using schema validity, by
 1130 adding hook to nxml-mode.
 1131 
 1132 **** Dynamic markup word should (at least optionally) be able to look in
 1133 other buffers that are using nxml-mode.
 1134 
 1135 **** Should clicking on Invalid move to next error if already on an error?
 1136 
 1137 **** Take advantage of a:documentation.  Needs change to schema format.
 1138 
 1139 **** Provide feasible validation (as in Jing) toggle.
 1140 
 1141 **** Save the validation state as a property on the error overlay to enable
 1142 more detailed diagnosis.
 1143 
 1144 **** Provide an Error Summary buffer showing all the validation errors.
 1145 
 1146 **** Pop-up menu.  What is useful?  Tag a region (should be grayed out if
 1147 the region is not balanced).  Suggestions based on error messages.
 1148 
 1149 **** Have configurable list of namespace URIs so that we can provide
 1150 namespace URI completion on extension elements or with schema-less documents.
 1151 
 1152 **** Allow validation to handle XInclude.
 1153 
 1154 **** ID/IDREF support.
 1155 
 1156 *** Completion
 1157 
 1158 **** Make it work with icomplete.  Only use a function to complete when
 1159 some of the possible names have undeclared namespaces.
 1160 
 1161 **** How should C-return in mixed text work?
 1162 
 1163 **** When there's a vacuous schema, C-return after < will insert the end-tag.
 1164 Is this a bug or a feature?
 1165 
 1166 **** After completing start-tag, ensure we don't get unhelpful message
 1167 from validation
 1168 
 1169 **** Syntax table for completion.
 1170 
 1171 **** Should complete start-tag name with a space if namespace attributes
 1172 are required.
 1173 
 1174 **** When completing start-tag name with no prefix and it doesn't match
 1175 should try to infer namespace from local name.
 1176 
 1177 **** Should completion pay attention to characters after point?  If so, how?
 1178 
 1179 **** When completing start-tag name, add required atts if only one required
 1180 attribute.
 1181 
 1182 **** When completing attribute name, add attribute value if only one value
 1183 is possible.
 1184 
 1185 **** After attribute-value completion, insert space after close delimiter
 1186 if more attributes are required.
 1187 
 1188 **** Complete on enumerated data values in elements.
 1189 
 1190 **** When in context that allows only elements, should get tag
 1191 completion without having to type < first.
 1192 
 1193 **** When immediately after start-tag name, and name is valid and not
 1194 prefix of any other name, should C-return complete on attribute names?
 1195 
 1196 **** When completing attributes, more consistent to ignore all attributes
 1197 after point.
 1198 
 1199 **** Inserting attribute value completions needs to be sensitive to what
 1200 delimiter is used so that it quotes the correct character.
 1201 
 1202 **** Complete on encoding-names in XML decl.
 1203 
 1204 **** Complete namespace declarations by searching for all namespaces
 1205 mentioned in the schema.
 1206 
 1207 *** Well-formed XML support
 1208 
 1209 **** Deal better with Mule-UCS
 1210 
 1211 **** Deal with UTF-8 BOM when reading.
 1212 
 1213 **** Complete entity names.
 1214 
 1215 **** Provide some support for entity names for MathML.
 1216 
 1217 **** Command to repeat the last tag.
 1218 
 1219 **** Support for changing between character references and characters.
 1220 Need to check that context is one in which character references are
 1221 allowed.  xmltok prolog parsing will need to distinguish parameter
 1222 literals from other kinds of literal.
 1223 
 1224 **** Provide a comment command to bind to M-; that works better than the
 1225 normal one.
 1226 
 1227 **** Make indenting in a multi-line comment work.
 1228 
 1229 **** Structure view.  Separate buffer displaying element tree.
 1230 Be able to navigate from structure view to document and vice-versa.
 1231 
 1232 **** Flash matching >.
 1233 
 1234 **** Smart selection command that selects increasingly large syntactically
 1235 coherent chunks of XML.  If point is in an attribute value, first
 1236 select complete value; then if command is repeated, select value plus
 1237 delimiters, then select attribute name as well, then complete
 1238 start-tag, then complete element, then enclosing element, etc.
 1239 
 1240 **** ispell integration.
 1241 
 1242 **** Block-level items in mixed content should be indented, e.g:
 1243   <para>This is list:
 1244     <ul>
 1245       <li>item</li>
 1246 
 1247 **** Provide option to indent like this:
 1248     <para>This is a paragraph
 1249      occupying multiple lines.</para>
 1250 
 1251 **** Option to add make a / that closes a start-tag electrically insert a
 1252 space for the XHTML guys.
 1253 
 1254 **** C-M-q should work.
 1255 
 1256 *** Datatypes
 1257 
 1258 **** Figure out workaround for CJK characters with regexps.
 1259 
 1260 **** Does category C contain Cn?
 1261 
 1262 **** Do ENTITY datatype properly.
 1263 
 1264 *** XML Parsing Library
 1265 
 1266 **** Parameter entity parsing option, nil (never), t (always),
 1267 unless-standalone (unless standalone="yes" in XML declaration).
 1268 
 1269 **** When a file is currently being edited, there should be an option to
 1270 use its buffer instead of the on-disk copy.
 1271 
 1272 *** Handling all XML features
 1273 
 1274 **** Provide better support for editing external general parsed entities.
 1275 Perhaps provide a way to force ignoring undefined entities; maybe turn
 1276 this on automatically with <?xml encoding=""?> (with no version
 1277 pseudo-att).
 1278 
 1279 **** Handle internal general entity declarations containing elements.
 1280 
 1281 **** Handle external general entity declarations.
 1282 
 1283 **** Handle default attribute declarations in internal subset.
 1284 
 1285 **** Handle parameter entities (including DTD).
 1286 
 1287 *** RELAX NG
 1288 
 1289 **** Do complete schema checking, at least optionally.
 1290 
 1291 **** Detect include/external loops during schema parse.
 1292 
 1293 **** Coding system detection for schemas.  Should use utf-8/utf-16 per the
 1294 spec.  But also need to allow encodings other than UTF-8/16 to support
 1295 CJK charsets that Emacs cannot represent in Unicode.
 1296 
 1297 *** Catching XML errors
 1298 
 1299 **** Check public identifiers.
 1300 
 1301 **** Check default attribute values.
 1302 
 1303 *** Performance
 1304 
 1305 **** Explore whether overlay-recenter can cure overlays performance problems.
 1306 
 1307 **** Cache schemas.  Need to have list of files and mtimes.
 1308 
 1309 **** Make it possible to reduce rng-validate-chunk-size significantly,
 1310 perhaps to 500 bytes, without bad performance impact: don't do
 1311 redisplay on every chunk; pass continue functions on other uses of
 1312 rng-do-some-validation.
 1313 
 1314 **** Cache after first tag.
 1315 
 1316 **** Introduce a new name class that is a choice between names (so that
 1317 we can use member)
 1318 
 1319 **** intern-choice should simplify after patterns with same 1st/2nd args
 1320 
 1321 **** Large numbers of overlays slow things down dramatically.  Represent
 1322 errors using text properties.  This implies we cannot incrementally
 1323 keep track of the number of errors, in order to determine validity.
 1324 Instead, when validation completes, scan for any characters with an
 1325 error text property; this seems to be fast enough even with large
 1326 buffers.  Problem with error at end of buffer, where there's no
 1327 character; need special variable for this.  Need to merge face from
 1328 font-lock with the error face: use :inherit attribute with list of two
 1329 faces.  How do we avoid making rng-valid depend on nxml-mode?
 1330 
 1331 *** Error recovery
 1332 
 1333 **** Don't stop at newline in looking for close of start-tag.
 1334 
 1335 **** Use indentation to guide recovery from mismatched end-tags
 1336 
 1337 **** Don't keep parsing when currently not well-formed but previously
 1338 well-formed
 1339 
 1340 **** Try to recover from a bad start-tag by popping an open element if
 1341 there was a mismatched end-tag unaccounted for.
 1342 
 1343 **** Try to recover from a bad start-tag open on the hypothesis that there
 1344 was an error in the namespace URI.
 1345 
 1346 **** Better recovery from ill-formed XML declarations.
 1347 
 1348 *** Usability improvements
 1349 
 1350 **** Should print a "Parsing..." message during long movements.
 1351 
 1352 **** Provide better position for reference to undefined pattern error.
 1353 
 1354 **** Put Well-formed in the mode-line when validating against any-content.
 1355 
 1356 **** Trim marking of illegal data for leading and trailing whitespace.
 1357 
 1358 **** Show Invalid status as soon as we are sure it's invalid, rather than
 1359 waiting for everything to be completely up to date.
 1360 
 1361 **** When narrowed, Valid or Invalid status should probably consider only
 1362 validity of narrowed region.
 1363 
 1364 *** Bug fixes
 1365 
 1366 **** Need to give an error for a document like: <foo/><![CDATA[  ]]>
 1367 
 1368 **** Make nxml-forward-balanced-item work better for the prolog.
 1369 
 1370 **** Make filling and indenting comments work in the prolog.
 1371 
 1372 **** Should delete RNC Input buffers.
 1373 
 1374 **** Figure out what regex use for NCName and use it consistently,
 1375 
 1376 **** Should have not-well-formed tokens in ref.
 1377 
 1378 **** Require version in XML declaration? Probably not because prevents
 1379 use for external parsed entities.  At least forbid standalone without version.
 1380 
 1381 **** Reject schema that compiles to rng-not-allowed-ipattern.
 1382 
 1383 **** Move point backwards on schema parse error so that it's on the right token.
 1384 
 1385 *** Internal
 1386 
 1387 **** Use rng-quote-string consistently.
 1388 
 1389 **** Use parsing library for XML to texinfo conversion.
 1390 
 1391 **** Rename xmltok.el to nxml-token.el.  Use nxml-t- prefix instead of
 1392 xmltok-.  Change nxml-t-type to nxml-t-token-type, nxml-t-start to
 1393 nxml-t-token-start.
 1394 
 1395 **** Can we set fill-prefix to nil and rely on indenting?
 1396 
 1397 **** xmltok should make available replacement text of entities containing
 1398 elements
 1399 
 1400 **** In rng-valid, instead of using modification-hooks and
 1401 insert-behind-hooks on dependent overlays, use same technique as nxml-mode.
 1402 
 1403 *** Fontification
 1404 
 1405 **** Allow face to depend on element qname, attribute qname, attribute
 1406 value.  Use list with pairs of (R . F), where R specifies regexps and
 1407 F specifies faces.  How can this list be made to depend on the document type?
 1408 
 1409 *** Other
 1410 
 1411 **** Support RELAX NG XML syntax (use XML parsing library).
 1412 
 1413 **** Support W3C XML Schema (use XML parsing library).
 1414 
 1415 **** Command to infer schema from current document (like trang).
 1416 
 1417 *** Schemas
 1418 
 1419 **** XSLT schema should take advantage of RELAX NG to express cooccurrence
 1420 constraints on attributes (e.g. xsl:template).
 1421 
 1422 *** Documentation
 1423 
 1424 **** Move material from README to manual.
 1425 
 1426 **** Document encodings.
 1427 
 1428 *** Notes
 1429 
 1430 **** How can we allow an error to be displayed on a different token from
 1431 where it is detected?  In particular, for a missing closing ">" we
 1432 will need to display it at the beginning of the following token.  At the
 1433 moment, when we parse the following token the error overlay will get cleared.
 1434 
 1435 **** How should rng-goto-next-error deal with narrowing?
 1436 
 1437 **** Perhaps should merge errors having same start position even if they
 1438 have different ends.
 1439 
 1440 **** How to handle surrogates? One possibility is to be compatible with
 1441 utf8.e: represent as sequence of 4 chars.  But utf-16 is incompatible
 1442 with this.
 1443 
 1444 **** Should we distinguish well-formedness errors from invalidity errors?
 1445 (I think not: we may want to recover from a bad start-tag by implying
 1446 an end-tag.)
 1447 
 1448 **** Seems to be a bug with Emacs, where a mouse movement that causes
 1449 help-echo text to appear counts as pending input but does not cause
 1450 idle timer to be restarted.
 1451 
 1452 **** Use XML to represent this file.
 1453 
 1454 **** I had a TODO which said simply "split-string".  What did I mean?
 1455 
 1456 **** Investigate performance on large files all on one line.
 1457 
 1458 *** Issues for Emacs versions >= 22
 1459 
 1460 **** Take advantage of UTF-8 CJK support.
 1461 
 1462 **** Supply a next-error-function.
 1463 
 1464 **** Investigate this NEWS item "Emacs now tries to set up buffer coding
 1465 systems for HTML/XML files automatically."
 1466 
 1467 **** Take advantage of the pointer text property.
 1468 
 1469 **** Leverage char-displayable-p.
 1470 
 1471 ** RefTeX
 1472 
 1473 *** Provide a wdired-like mode for editing RefTeX TOC buffers.
 1474 As a first step, renaming of sections could be supported.  Ultimately,
 1475 it would be great if it also supported moving sections, e.g., by
 1476 killing and yanking or providing org-mode like "move section
 1477 upwards/downwards" commands.  However, that's not so easy in the
 1478 presence of multi-file documents.
 1479 
 1480 * Internal changes
 1481 
 1482 ** Cleanup all the GC_ mark bit stuff -- there is no longer any distinction
 1483    since the mark bit is no longer stored in the Lisp_Object itself.
 1484 
 1485 ** Refine the 'predicate' arg to read-file-name.
 1486    Currently, it mixes up the predicate to apply when doing completion and the
 1487    one to use when terminating the selection.
 1488 
 1489 ** Merge ibuffer.el and buff-menu.el.
 1490    More specifically do what's needed to make ibuffer.el the default,
 1491    or just an extension of buff-menu.el.
 1492 
 1493 ** Replace linum.el with nlinum.el
 1494    https://lists.gnu.org/r/emacs-devel/2013-08/msg00379.html
 1495 
 1496 ** Merge sendmail.el and messages.el.
 1497    Probably not a complete merge, but at least arrange for messages.el to be
 1498    a derived mode of sendmail.el.  Or arrange for messages.el to be split
 1499    into a small core and "the rest" so that we use less resources as long as
 1500    we stick to the features provided in sendmail.el.
 1501 
 1502 ** Replace gmalloc.c with the modified Doug Lea code from the current
 1503    GNU libc so that the special mmapping of buffers can be removed --
 1504    that apparently loses under Solaris, at least. [fx has mostly done
 1505    this.]
 1506 
 1507 ** Rewrite make-docfile to be clean and maintainable.
 1508    It might be better to replace it with Lisp, using the byte compiler.
 1509    https://lists.gnu.org/r/emacs-devel/2012-06/msg00037.html
 1510 
 1511 ** Add an inferior-comint-minor-mode to capture the common set of operations
 1512    offered by major modes that offer an associated inferior
 1513    comint-derived mode.  I.e. basically make cmuscheme.el/inf-lisp.el generic.
 1514    For use by sml-mode, python-mode, tex-mode, scheme-mode, lisp-mode,
 1515    haskell-mode, tuareg-mode, ...
 1516 
 1517 ** Add "link" button class
 1518    Add a standard button-class named "link", and make all other link-like
 1519    button classes inherit from it.  Set the default face of the "link" button
 1520    class to the standard "link" face.
 1521 
 1522 * Wishlist items:
 1523 
 1524 ** Maybe replace etags.c with a Lisp implementation.
 1525 https://lists.gnu.org/r/emacs-devel/2012-06/msg00354.html
 1526 
 1527 ** Maybe replace lib-src/rcs2log with a Lisp implementation.
 1528 It wouldn't have to be a complete replacement, just enough
 1529 for vc-rcs-update-changelog.
 1530 
 1531 * Other known bugs:
 1532 
 1533 ** 'make-frame' forgets unhandled parameters, at least for X11 frames.
 1534 
 1535 ** a two-char comment-starter whose two chars are symbol constituents will
 1536 not be noticed if it appears within a word.
 1537 
 1538 
 1539 This file is part of GNU Emacs.
 1540 
 1541 GNU Emacs is free software: you can redistribute it and/or modify
 1542 it under the terms of the GNU General Public License as published by
 1543 the Free Software Foundation, either version 3 of the License, or
 1544 (at your option) any later version.
 1545 
 1546 GNU Emacs is distributed in the hope that it will be useful,
 1547 but WITHOUT ANY WARRANTY; without even the implied warranty of
 1548 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 1549 GNU General Public License for more details.
 1550 
 1551 You should have received a copy of the GNU General Public License
 1552 along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 1553 
 1554 ;; Local Variables:
 1555 ;; coding: utf-8
 1556 ;; End: