"Fossies" - the Fresh Open Source Software Archive

Member "emacs-25.3/etc/TODO" (14 Apr 2017, 60190 Bytes) of package /linux/misc/emacs-25.3.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 last Fossies "Diffs" side-by-side code changes report for "TODO": 25.1_vs_25.2.

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