Refill some copyright headers.
[bpt/emacs.git] / etc / TODO
1 Emacs TODO List -*-outline-*-
2
3 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
4 2010, 2011 Free Software Foundation, Inc.
5 See the end of the file for license conditions.
6
7
8 If you are ready to start working on any of these TODO items, we
9 appreciate your help; please write to emacs-devel@gnu.org so we can be
10 aware that the problem is being addressed, and talk with you how to do
11 it best. Since Emacs is an FSF-copyrighted package, please be
12 prepared to sign legal papers to transfer the copyright on your work
13 to the FSF.
14
15 * Tentative plan for Emacs-24
16
17 ** Bidi
18 ** lexbind: I haven't checked the status of the code recently, so
19 I don't know how realistic it is to include it. But it's been around
20 for a long time, and I trust Miles, so I have hope.
21 ** concurrency: including it as an "experimental" compile-time option
22 sounds good. Of course there might still be big questions around
23 "which form of concurrency" we'll want.
24 ** Overhaul of customize: sounds wonderful.
25 ** some kind of color-theme: agreed.
26 ** better support for dynamic embedded graphics: I like this idea (my
27 mpc.el code could use it for the volume widget), tho I wonder if the
28 resulting efficiency will be sufficient.
29 ** Spread Semantic.
30 ** Improve the "code snippets" support: consolidate skeleton.el, tempo.el,
31 and expand.el (any other?) and then advertise/use/improve it.
32 ** Improve VC: yes, there's a lot of work to be done there :-(
33 And most of it could/should make it into Emacs-23.3.
34 ** package manager.
35
36 ** Random things that cross my mind right now that I'd like to see (some of
37 them from my local hacks), but it's not obvious at all whether they'll
38 make it.
39 *** multiple inheritance for keymaps (to get rid of the
40 fix_submap_inheritance hack and to more cleanly express the
41 relationship between minibuffer-local-*-map): I've had this locally
42 for a long time, but the details of the semantics is somewhat ... delicate.
43 *** prog-mode could/should provide a better fill-paragraph default
44 that uses syntax-tables to recognize string/comment boundaries.
45 *** provide more completion-at-point-functions. Make existing
46 in-buffer completion use completion-at-point.
47 *** "functional" function-key-map that would make it easy to add (and
48 remove) mappings like "FOO-mouse-4 -> FOO-scroll-down",
49 "FOO-tab -> ?\FOO-\t", "uppercase -> lowercase", "[fringe KEY...] ->
50 [KEY]", "H-FOO -> M-FOO", "C-x C-y FOO -> H-FOO", ...
51
52
53 * Simple tasks. These don't require much Emacs knowledge, they are
54 suitable for anyone from beginners to experts.
55
56 ** Convert modes that use view-mode to be derived from special-mode instead.
57
58 ** Major modes should have a menu entry. Examples of modes that do
59 not have one at the moment and probably should: text-mode, inferior-lisp-mode.
60
61 ** Check if all items on the mode-line have a suitable tooltip for all modes.
62
63 ** edebug and debugger-mode should have a toolbar.
64 It can use the same icons as gud.
65
66 ** Check what minor modes don't use define-minor-mode and convert them
67 to use it.
68
69 ** Convert all defvars with leading `*' in the doc-strings into defcustoms
70 of appropriate :type and :group.
71
72 ** Remove any leading `*'s from defcustom doc-strings.
73
74 ** Remove unnecessary autoload cookies from defcustoms.
75 This needs a bit of care, since often people have become used to
76 expecting such variables to always be defined, eg when they modify
77 things in their .emacs.
78
79 ** See if other files can use generated-autoload-file (see eg ps-print).
80
81 * Small but important fixes needed in existing features:
82
83 ** Flymake's customization mechanism needs to be both simpler (fewer
84 levels of indirection) and better documented, so it is easier to
85 understand. I find it quite hard to figure out what compilation
86 command it will use.
87
88 I suggest totally rewriting that part of Flymake, using the simplest
89 mechanism that sufficies for the specific needs. That will be easy
90 for users to customize.
91
92 ** Compute the list of active keymaps *after* reading the first event.
93
94 ** Distribute a bar cursor of width > 1 evenly between the two glyphs
95 on each side of the bar (what to do at the edges?).
96
97 ** buffer-offer-save should be a permanent local.
98
99 ** revert-buffer should eliminate overlays and the mark.
100 For related problems consult the thread starting with
101 http://lists.gnu.org/archive/html/emacs-devel/2005-11/msg01346.html
102
103 ** erase-buffer should perhaps disregard read-only properties of text.
104
105 ** Fix the kill/yank treatment of invisible text. At the moment,
106 invisible text is placed in the kill-ring, so that the contents of
107 the ring may not correspond to the text as displayed to the user.
108 It ought to be possible to omit text which is invisible (due to a
109 text-property, overlay, or selective display) from the kill-ring.
110
111 ** Change the way define-minor-mode handles autoloading.
112 It should not generate :require. Or :require in defcustom
113 should not be recorded in the user's custom-set-variables call.
114
115 ** Feature to change cursor shape when Emacs is idle (for more than
116 a specified time).
117
118 ** The buttons at the top of a custom buffer should not omit
119 variables whose values are currently hidden.
120
121 ** Clean up the variables in browse-url. Perhaps use a shell command string to
122 specify the browser instead of the mushrooming set of functions.
123 See also ESR's proposal for a BROWSER environment variable
124 <URL:http://www.catb.org/~esr/BROWSER/browse-url.patch>.
125
126 ** Enhance scroll-bar to handle tall line (similar to line-move).
127
128 ** In Custom buffers, put the option that turns a mode on or off first,
129 using a heuristic of some kind?
130
131 ** Define recompute-arg and recompute-arg-if for fix_command to use.
132 See rms message of 11 Dec 05.
133
134 ** Height returned by frame-parameter ... and height given to
135 make-frame does not mean the same thing. The former includes menu and
136 tool bar lines, the latter don't. frame-parameter should return height
137 without menu and tool bar lines.
138
139 ** In Emacs Info, examples of using Customize should be clickable
140 and they should create Custom buffers.
141
142 ** The toolbar should show keyboard equivalents in its tooltips.
143
144 ** Add function to redraw the tool bar.
145
146 ** Redesign the load-history data structure so it can cope better
147 with evaluating definitions of the same function from different files,
148 recording which file the latest definition came from.
149
150 ** make back_comment use syntax-ppss or equivalent.
151
152 ** Consider improving src/sysdep.c's search for a fqdn.
153 http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00782.html
154
155 ** Find a proper fix for rcirc multiline nick adding.
156 http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00684.html
157
158 ** Implement `network-interface-list' and `network-interface-info'
159 on MS-Windows. Hint: the information is present in the Registry,
160 under the keys
161 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage\
162 and
163 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<device>\
164 where <device> is the network device found under the first key.
165
166 ** Check for any included packages that define obsolete bug-reporting commands.
167 Change them to use report-emacs-bug.
168
169 ** Allow fringe indicators to display a tooltip (provide a help-echo property?)
170
171 ** Add a defcustom that supplies a function to name numeric backup files,
172 like make-backup-file-name-function for non-numeric backup files.
173
174 ** `dired-mode' should specify the semantics of `buffer-modified-p' for
175 dired buffers and DTRT WRT `auto-revert-mode'.
176
177 ** Check uses of prin1 for error-handling.
178 http://lists.gnu.org/archive/html/emacs-devel/2008-08/msg00456.html
179
180 * Important features:
181 ** Extended text-properties (to make overlays "obsolete")
182 *** Several text-property planes
183 This would get us rid of font-lock-face property (and I'd be happy to
184 get rid of char-property-alias-alist as well) since font-lock would
185 simply use the `face' property in the `font-lock' plane.
186 Each property would come with an Elisp merge-function. The merge
187 would be performed in add-text-properties.
188 *** zero-width text-properties.
189 ** Having tabs above a window to switch buffers in it.
190
191 ** "Perspectives" are named persistent window configurations. We have
192 had the window configuration mechanism in GNU Emacs since the
193 beginning but we have never developed a good user interface to take
194 advantage of them. Eclipse's user interface seems to be good.
195
196 Perspectives work well even if you do the equivalent of C-x 4 C-f
197 because of the distinction between view windows vs file windows. In
198 Emacs this is more or less the "dedicated window" feature, but we have
199 never really made it work for this.
200
201 Perspectives also need to interact with the tabs.
202
203 ** Imenu could be extended into a file-structure browsing mechanism
204 using code like that of customize-groups.
205
206 ** Display something in the margin on lines that have compilation errors.
207
208 ** Compilation error navigation bar, parallel to the scroll bar,
209 indicating where in the buffer there are compilation errors.
210 Perhaps we could arrange to display these error indications on top
211 of the scroll bar itself. That depends on to what extent toolkit
212 scroll bars are extensible.
213
214 ** Provide user-friendly ways to list all available font families,
215 list fonts, display a font as a sample, etc. [fx is looking at
216 multilingual font selection for the Unicode branch of Emacs.]
217
218 ** Provide a convenient way to select a color with the mouse.
219
220 ** Rewrite the face code to be simpler, clearer and faster.
221
222 ** Program Enriched mode to read and save in RTF. [Is there actually a
223 decent single definition of RTF? Maybe see info at
224 http://latex2rtf.sourceforge.net/.] This task seems to be addressed
225 by http://savannah.nongnu.org/projects/emacs-rtf/, which is still in
226 very early stages.
227
228 ** Implement primitive and higher-level functions to allow filling
229 properly with variable-pitch faces.
230
231 ** Implement a smoother vertical scroll facility, one that allows
232 C-v to scroll through a tall image. The primitive operations
233 posn-at-point and posn-at-x-y should now make it doable in elisp.
234
235 ** Implement intelligent search/replace, going beyond query-replace
236 (see http://groups.csail.mit.edu/uid/projects/clustering/chi04.pdf).
237
238 ** Implement other text formatting properties.
239 *** Footnotes that can appear either in place or at the end of the page.
240 *** text property that says "don't break line in middle of this".
241 Don't break the line between two characters that have the
242 same value of this property.
243 *** Discretionary hyphens that are not visible when they are at end of line.
244
245 ** Internationalize Emacs's messages.
246
247 ** Set up a facility to save backtraces when errors happen during
248 specified filters, specified timers, and specified hooks.
249
250 ** Install mmc@maruska.dyndns.org's no-flicker change.
251
252 ** Add a "current vertical pixel level" value that goes with point,
253 so that motion commands can also move through tall images.
254 This value would be to point as window-vscroll is to window-start.
255
256 ** Address internationalization of symbols names essentially
257 as documentation, e.g. in command names and Custom.
258
259 ** Make the Lucid menu widget display multilingual text. [This
260 probably needs to be done from actual Emacs buffers, either directly
261 in the menu or by rendering in an unmapped window and copying the
262 pixels. The current code assumes a specific locale; that isn't good
263 enough even if X can render the arbitrary text] [The gtk
264 port now displays multilingual text in menus, but only insofar as
265 Emacs can encode it as utf-8 and gtk can display the result.]
266 Maybe making Lucid menus work like Gtk's (i.e. just force utf-8) is good
267 enough now that Emacs can encode most chars into utf-8.
268
269 ** Remove the limitation that window and frame widths and heights can
270 be only full columns/lines.
271
272 * Other features we would like:
273
274 ** Make longlines-mode wrap lines based on screen position instead
275 of character position, so that variable-width fonts can be handled
276 properly.
277
278 ** Allow frames(terminals) created by emacsclient to inherit their environment
279 from the emacsclient process.
280 ** Remove the default toggling behavior of minor modes when called from elisp
281 rather than interactively. This a trivial one-liner in easy-mode.el.
282
283 ** Create a category of errors called `user-error' for errors which are
284 typically due to pilot errors and should thus be in debug-ignored-errors.
285
286 ** Give Tar mode all the features of Archive mode.
287
288 ** Create a category of errors called `process-error'
289 for some or all errors associated with using subprocesses.
290
291 ** Maybe reinterpret `parse-error' as a category of errors
292 and put some other errors under it.
293
294 ** A function to tell you the argument pattern of functions.
295 See `function-arity' in http://www.loveshack.ukfsn.org/emacs/fx-misc.el.
296
297 ** Make byte-compile warn when a doc string is too wide.
298
299 ** Make byte-optimization warnings issue accurate line numbers.
300
301 ** A function to check for customizable options that have been
302 set but not saved, and ask the user whether to save them.
303 This could go in kill-emacs-query-functions, to remind people
304 to save their changes. If the user says yes, show them
305 in a Custom buffer using customize-customized.
306
307 ** Record the sxhash of the default value for customized variables
308 and notify the user (maybe by adding a menu item or toolbar button,
309 as the detection can occur during autoload time) when the default
310 changes (meaning that new versions of the Lisp source with a changed
311 default value got installed) and offer ediff on the respective
312 customization buffers.
313
314 ** Emacs Lisp mode could put an overlay on the defun for every
315 function that has advice. The overlay could have `after-text' like
316 " [Function has advice]". It might look like (defun foo [Function
317 has advice] (x y) The overlay could also be a button that you could
318 use to view the advice.
319
320 ** Add a function to get the insertion-type of the markers in an overlay.
321
322 ** ange-ftp
323 *** understand sftp
324 This is hard to make work because sftp doesn't print status messages.
325
326 *** Use MLS for ange-ftp-insert-directory if a list of files is specified.
327
328 ** Ability to map a key, including all modified-combinations.
329 E.g map mouse-4 to wheel-up as well as M-mouse-4 -> M-wheel-up
330 M-C-mouse-4 -> M-C-wheel-up, H-S-C-M-s-double-mouse-4 ->
331 H-S-C-M-s-double-wheel-up, ...
332
333 ** Beefed-up syntax-tables.
334 *** recognize multi-character syntactic entities like `begin' and `end'.
335 *** nested string-delimiters (for Postscript's (foo(bar)baz) strings).
336 *** support for infix operators (with precedence).
337 *** support for the $ (paired delimiter) in parse-partial-sexp.
338 *** support for hook-chars whose effect on the parsing-state is specified
339 by elisp code. Thus a char could both close a string and open a comment
340 at the same time and do it in a context-sensitive way.
341 *** ability to add mode-specific data to the partial-parse-state.
342
343 ** Add a way to convert a keyboard macro to equivalent Lisp code.
344
345 ** Have a command suggestion help system that recognizes patterns
346 of commands which could be replaced with a simpler common command.
347 It should not make more than one suggestion per 10 minutes.
348
349 ** Add a way to define input methods by computing them (when first used)
350 from other input methods. Then redefine C-x 8 to use a
351 user-selected input method, with the default being the union of
352 latin-1-prefix and latin-1-postfix.
353
354 ** Switch the Windows port to using Unicode keyboard input (maybe).
355 Based on http://msdn2.microsoft.com/en-us/library/ms633586.aspx,
356 this boils down to (1) calling RegisterClassW function to register
357 Emacs windows, and (2) modifying ALL system messages to use Unicode.
358 In particular, WM_CHAR messages, which result from keyboard input,
359 will then come in encoded in UTF-16.
360
361 One advantage of switching to Unicode is to toss encoded-kbd usage,
362 which will solve the problem with binding non-ASCII keys with modifiers.
363
364 Problem: using this on Windows 9x/ME requires installing the
365 Microsoft Layer for Unicode (MSLU), which might not implement all
366 the required functionality that is available built-in on Windows XP
367 and later. We should not make this change if it would pressure
368 users of unauthorized copies of older versions of Windows to
369 downgrade to versions that require activation.
370
371 ** Implement a clean way to use different major modes for
372 different parts of a buffer. This could be useful in editing
373 Bison input files, for instance, or other kinds of text
374 where one language is embedded in another language. See
375 http://www.loveshack.ukfsn.org/emacs/multi-mode.el and also
376 mmm-mode, as reference for approaches taken by others.
377
378 ** Arrange a way for an input method to return the first character
379 immediately, then replace it later. So that C-s a with
380 input method latin-1-postfix would immediately search for an a.
381
382 ** Give start-process the ability to direct standard-error
383 output to a different filter.
384
385 ** Make desktop.el save the "frame configuration" of Emacs (in some
386 useful sense).
387
388 ** Give desktop.el a feature to switch between different named desktops.
389
390 ** Add a cpio mode, more or less like tar mode.
391
392 ** Save undo information in special temporary files, and reload it
393 when needed for undoing. This could extend undo capacity.
394
395 ** Change the Windows NT menu code
396 so that it handles the deep_p argument and avoids
397 regenerating the whole menu bar menu tree except
398 when the user tries to use the menubar.
399
400 This requires the RIT to forward the WM_INITMENU message to
401 the main thread, and not return from that message until the main
402 thread has processed the MENU_BAR_ACTIVATE_EVENT and regenerated
403 the whole menu bar. In the mean time, it should process other messages.
404
405 ** Get some major packages installed: W3 (development version needs
406 significant work), PSGML, _possibly_ ECB.
407 http://lists.gnu.org/archive/html/emacs-devel/2007-05/msg01493.html
408 Check the assignments file for other packages which might go in and
409 have been missed.
410
411 ** Possibly install python-mode in place of python.el, or combine the two.
412 Someone needs to do the work of figuring out who all the non-trivial
413 python-mode.el contributors are and getting assignments.
414 http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg02156.html
415 http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg02201.html
416 http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg02489.html
417 http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg02234.html
418
419 ** Make keymaps a first-class Lisp object (this means a rewrite of
420 keymap.c). What should it do apart from being opaque ?
421 multiple inheritance ? faster where-is ? no more fix_submap_inheritance ?
422 what else ?
423
424 ** Provide real menus on ttys. The MS-DOS implementation can serve as
425 an example how to do part of this; see the XMenu* functions on msdos.c.
426
427 ** Implement popular parts of the rest of the CL functions as compiler
428 macros in cl-macs.
429
430 ** Make compiler warnings about functions that might be undefined at run time
431 smarter, so that they know which files are required by the file being
432 compiled and don't warn about functions defined in them.
433
434 ** Highlight rectangles (`mouse-track-rectangle-p' in XEmacs). Already in CUA,
435 but it's a valuable feature worth making more general.
436
437 ** Provide MIME support for Rmail using the Gnus MIME library. [Maybe
438 not now feasible, given Gnus maintenance decisions. fx looked at
439 this and can say where some of the problems are.]
440
441 ** Eliminate the storm of warnings concerning char/unsigned char
442 mismatches that we get with GCC 4.x and proprietary compilers on
443 various systems. They make it difficult to spot the important warnings.
444
445 ** Fix anything necessary to use `long long' EMACS_INTs with GCC.
446
447 ** Split out parts of lisp.h [and generate Makefile dependencies automatically.]
448 [the last bit is done, see DEPFLAGS etc in src/Makefile.in ]
449
450 ** Update the FAQ.
451
452 ** Allow auto-compression-mode to use zlib calls if zlib is available.
453 [It's required for PNG, so may be linked anyhow.]
454
455 ** Add a --pristine startup flag which does -q --no-site-file plus
456 ignoring X resources (Doze equivalents?) and most of the
457 environment. What should not be ignored needs consideration.
458 [Do the existing -Q and -D cover this, or is more needed?]
459
460 ** Improve the GC (generational, incremental). (We may be able to use
461 the Boehm collector.) [See the Boehm-GC branch in CVS for work on this.]
462
463 ** Check what hooks would help Emacspeak -- see the defadvising in W3.
464
465 ** Add definitions for symbol properties, for documentation purposes.
466
467 ** Add horizontal scroll bars.
468
469 ** Provide an optional feature which computes a scroll bar slider's
470 size and its position from lines instead of characters.
471
472 ** Allow unknown image types to be rendered via an external program
473 converting them to, say, PBM (in the same way as PostScript?). [does
474 doc-view.el do this, or could it be extended to do this?]
475
476 ** Allow displaying an X window from an external program in a buffer,
477 e.g. to render graphics from Java applets. [gerd and/or wmperry
478 thought this was feasible.]
479
480 ** Allow images (not just text) in the margin to be mouse-sensitive.
481 (Requires recursing through display properties). Provide some way
482 to simulate mouse-clicks on marginal text without a mouse.
483
484 ** Implement Lisp functions to determine properly whether a character
485 is displayable (particularly needed in XFree 4, sigh). Use it to
486 define useful glyphs that may be displayed as images or unicodes
487 (with ASCIIfied fallback via latin1-disp). Examples include
488 box-drawing graphics in Custom buffers, W3 rules and tables, and
489 tree displays generally, mode-line mail indicator. [See work done
490 already for Emacs 23 and consult fx.]
491
492 ** Do something to make rms happy with fx's dynamic loading, and use it
493 to implement things like auto-loaded buffer parsers and database
494 access in cases which need more than Lisp.
495
496 ** Extend ps-print to deal with multiple font sizes, images, and extra
497 encodings.
498
499 ** Provide portable undumping using mmap (per gerd design).
500
501 ** Make byte-compile avoid binding an expanded defsubst's args
502 when the body only calls primitives.
503
504 ** Use the XIE X extension, if available, for image display.
505
506 ** Make monochrome images display using the foreground and background
507 colors of the applicable faces.
508
509 ** Make `format-time-string' preserve text properties like `format'.
510
511 ** Optionally make the cursor a little thinner at the end of a line
512 or the end of the buffer.
513
514 ** Port the conservative stack marking code of Emacs' garbage collector
515 to more systems, so that we can completely get rid of GCPROs. Note
516 that Boehm garbage collector provides this.
517
518 ** Reorder defcustom's in each package so that the more important
519 options come first in the Customize buffers. This could be done by
520 either rearranging the file (since options are shown in the order
521 they appear in the *.el files), or by adding a few :set-after attributes.
522
523 ** Maybe document the features of libraries missing from the manual (or
524 ancillary manuals, including the Lisp manual in some cases).
525 This is not worth doing for all of these packages and we need not
526 aim for completeness, but some may be worth documenting.
527
528 Here's a list which is probably not complete/correct: align, allout,
529 artist, ansi-color, array, battery, calculator, cdl, cmuscheme,
530 completion, cua, delim-col, dirtrack, double, echistory, elide-head,
531 easymenu, expand, flow-ctrl, format [format-alist],
532 generic/generic-x [various modes], kermit, log-edit, ledit
533 [obsolete?], makesum, midnight [other than in Kill Buffer node],
534 mouse-copy [?], mouse-drag, mouse-sel, net-utils, rcompile,
535 snmp-mode [?], soundex [should be interactive?], strokes [start from
536 the web page], talk, thingatpt [interactive functions?], type-break,
537 vcursor, xscheme, zone-mode [?], mlconvert [?], iso-cvt, iso-swed,
538 swedish, feedmail [?], uce, bruce, gametree, meese, page-ext,
539 refbib, refer, scribe, sgml-mode, spell, texinfo, underline,
540 cmacexp, hideif, mantemp [obsolete?], pcomplete, assoc, xml,
541 cvs-status (should be described in PCL-CVS manual); other progmodes,
542 probably in separate manual.
543
544 ** Convert the XPM bitmaps to PPM, replace the PBMs with them and scrap
545 the XPMs so that the color versions work generally. (Requires care
546 with the color used for the transparent regions.)
547
548 ** Convenient access to the `values' variable. It would be nice to have an
549 interface that would show you the printed reps of the elements of the
550 list in a menu, let you select one of the values, and put it into some
551 other variable, without changing the value of `values'.
552
553 ** (Controlled by a flag) make open and close syntax match exactly,
554 i.e. `(' doesn't match `]'.
555
556 ** Specify parameter ID-FORMAT in all calls to `file-attributes' and
557 `directory-files-and-attributes' where attributes UID or GID are used.
558 Whenever possible, use value 'string.
559 When done, change meaning of default value from 'integer to 'string.
560 If value 'integer is used nowhere, remove the parameter ID-FORMAT from
561 the definition of `file-attributes' and `directory-files-and-attributes'
562 and from the calls.
563
564 ** Make language-info-alist customizable. Currently a user can customize
565 only the variable `current-language-environment'.
566
567 ** Improve language environment handling so that Emacs can fit
568 better to a users locale. Currently Emacs uses utf-8 language
569 environment for all utf-8 locales, thus a user in ja_JP.UTF-8 locale
570 are also put in utf-8 lang. env. In such a case, it is
571 better to use Japanese lang. env. but prefer utf-8 coding system.
572
573 ** Enhance locale handling: handle language, territory and charset
574 orthogonally and de-emphasize language environments. Use the locale
575 to set up more things, such as fontsets, the default Ispell
576 dictionary, diary format, calendar holidays and display, quoting
577 characters and phrase boundaries, sentence endings, collation for
578 sorting (at least for unicodes), HTTP Accept-language, patterns for
579 directory listings and compilation messages, yes-or-no replies,
580 common menu items when the toolkit supports it ... `locale-info'
581 needs extending for LC_COLLATE &c. [fx started on this.]
582
583 ** Eliminate the current restriction on header printing by ps-print.
584 Currently, a header can contain only single 1-byte charset in
585 addition to ASCII.
586
587 ** In ps-print, provide an user friendly interface to specify fonts.
588
589 ** Enhance word boundary detection for such a script that doesn't use
590 space at word boundary (e.g. Thai).
591
592 ** Implement interface programs with major Japanese conversion server
593 in lib-src so that they can be used from the input method
594 "japanese". Currently, most Japanese users are using external
595 packages (e.g. tamago, anthy) or an input method via XIM.
596
597 ** Let LEIM handle the Mode_switch key like XIM does (i.e. a toggle like C-\
598 but which can also be used as a modifier).
599
600 ** Improve Help buffers: Change the face of previously visited links (like
601 Info, but also with regard to namespace), and give the value of
602 lisp expressions, e.g auto-mode-alist, the right face.
603
604 ** Possibly make `list-holidays' eval items in the calendar-holidays variable.
605 See thread
606 <http://lists.gnu.org/archive/html/emacs-devel/2006-02/msg01034.html>.
607 [rgm@gnu.org will look at this after 22.1]
608
609 ** Possibly make cal-dst use the system timezone database directly.
610 See thread
611 <http://lists.gnu.org/archive/html/emacs-pretest-bug/2006-11/msg00060.html>
612
613 ** Possibly add a "close" button to the modeline.
614 The idea is to add an "X" of some kind, that when clicked deletes
615 the window associated with that modeline.
616 http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg02416.html
617
618 * Things to be done for specific packages or features
619
620 ** NeXTstep port
621
622 *** Bugs
623
624 **** (mouse-avoidance-mode 'banish) then minimize Emacs, will pop window back
625 up on top of all others
626
627 **** free_frame_resources, face colors
628
629 **** Numeric keysetting bug.
630
631 *** Mac-related
632
633 **** Open file:/// URLs.
634
635 **** Put frame autopositioning into C code somewhere -- if loc = same, offset.
636
637 **** Automap ctrl-mouse-1 to mouse-3.
638
639 **** Deal with Finder aliases somehow.
640
641 **** Ctrl-F2 won't pull up menus.
642
643 *** Other / Low Priority:
644
645 **** Better recognition of unicode scripts / Greek / composition.
646
647 **** Undo for color-drag face customization.
648
649 ** ImageMagick support
650
651 *** image-type-header-regexps priorities the jpeg loader over the
652 ImageMagick one. This is not wrong, but how should a user go about
653 prefering the ImageMagick loader? The user might like zooming etc in jpegs.
654
655 Try (setq image-type-header-regexps nil) for a quick hack to prefer
656 ImageMagick over the jpg loader.
657
658 *** For some reason its unbearably slow to look at a page in a large
659 image bundle using the :index feature. The ImageMagick "display"
660 command is also a bit slow, but nowhere near as slow as the Emacs
661 code. It seems ImageMagick tries to unpack every page when loading the
662 bundle. This feature is not the primary usecase in Emacs though.
663
664 ImageMagick 6.6.2-9 introduced a bugfix for single page djvu load. It
665 is now much faster to use the :index feature, but still not very fast.
666
667 *** Try to cache the num pages calculation. It can take a while to
668 calculate the number of pages, and if you need to do it for each page
669 view, page-flipping becomes uselessly slow.
670
671 *** Integrate with image-dired.
672
673 *** Integrate with docview.
674
675 *** Integrate with image-mode.
676 Some work has been done, e.g. M-x image-transform-fit-to-height will
677 fit the image to the height of the Emacs window.
678
679 *** Look for optimizations for handling images with low depth.
680 Currently the code seems to default to 24 bit RGB which is costly for
681 images with lower bit depth.
682
683 *** Decide what to do with some uncommitted imagemagick support
684 functions for image size etc.
685
686 *** Test with more systems.
687 Tested on Fedora 12, 14, and the libmagick that ships with it.
688 I also tried using an ImageMagick compiled from their SVN, in
689 parallel with the one packaged by Fedora, it worked well.
690 Ubuntu 8.04 was tested, but it seems it ships a broken ImageMagick.
691
692 ** nxml mode
693
694 *** High priority
695
696 **** Command to insert an element template, including all required
697 attributes and child elements. When there's a choice of elements
698 possible, we could insert a comment, and put an overlay on that
699 comment that makes it behave like a button with a pop-up menu to
700 select the appropriate choice.
701
702 **** Command to tag a region. With a schema should complete using legal
703 tags, but should work without a schema as well.
704
705 **** Provide a way to conveniently rename an element. With a schema should
706 complete using legal tags, but should work without a schema as well.
707
708 *** Outlining
709
710 **** Implement C-c C-o C-q.
711
712 **** Install pre/post command hook for moving out of invisible section.
713
714 **** Put a modify hook on invisible sections that expands them.
715
716 **** Integrate dumb folding somehow.
717
718 **** An element should be able to be its own heading.
719
720 **** Optimize to avoid complete buffer scan on each command.
721
722 **** Make it work with HTML-style headings (i.e. level indicated by
723 name of heading element rather than depth of section nesting).
724
725 **** Recognize root element as a section provided it has a title, even
726 if it doesn't match section-element-name-regex.
727
728 **** Support for incremental search automatically making hidden text visible.
729
730 **** Allow title to be an attribute.
731
732 **** Command that says to recognize the tag at point as a section/heading.
733
734 **** Explore better ways to determine when an element is a section
735 or a heading.
736
737 **** rng-next-error needs to either ignore invisible portion or reveal it
738 (maybe use isearch oriented text properties).
739
740 **** Errors within hidden section should be highlighted by underlining the
741 ellipsis.
742
743 **** Make indirect buffers work.
744
745 **** How should nxml-refresh outline recover from non well-formed tags?
746
747 **** Hide tags in title elements?
748
749 **** Use overlays instead of text properties for holding outline state?
750 Necessary for indirect buffers to work?
751
752 **** Allow an outline to go in the speedbar.
753
754 **** Split up outlining manual section into subsections.
755
756 **** More detail in the manual about each outlining command.
757
758 **** More menu entries for hiding/showing?
759
760 **** Indication of many lines have been hidden?
761
762 *** Locating schemas
763
764 **** Should rng-validate-mode give the user an opportunity to specify a
765 schema if there is currently none? Or should it at least give a hint
766 to the user how to specify a non-vacuous schema?
767
768 **** Support for adding new schemas to schema-locating files.
769 Add documentElement and namespace elements.
770
771 **** C-c C-w should be able to report current type id.
772
773 **** Implement doctypePublicId.
774
775 **** Implement typeIdBase.
776
777 **** Implement typeIdProcessingInstruction.
778
779 **** Support xml:base.
780
781 **** Implement group.
782
783 **** Find preferred prefix from schema-locating files. Get rid of
784 rng-preferred-prefix-alist.
785
786 **** Inserting document element with vacuous schema should complete using
787 document elements declared in schema locating files, and set schema
788 appropriately.
789
790 **** Add a ruleType attribute to the <include> element?
791
792 **** Allow processing instruction in prolog to contain the compact syntax
793 schema directly.
794
795 **** Use RDDL to locate a schema based on the namespace URI.
796
797 **** Should not prompt to add redundant association to schema locating file.
798
799 **** Command to reload current schema.
800
801 *** Schema-sensitive features
802
803 **** Should filter dynamic markup possibilities using schema validity, by
804 adding hook to nxml-mode.
805
806 **** Dynamic markup word should (at least optionally) be able to look in
807 other buffers that are using nxml-mode.
808
809 **** Should clicking on Invalid move to next error if already on an error?
810
811 **** Take advantage of a:documentation. Needs change to schema format.
812
813 **** Provide feasible validation (as in Jing) toggle.
814
815 **** Save the validation state as a property on the error overlay to enable
816 more detailed diagnosis.
817
818 **** Provide an Error Summary buffer showing all the validation errors.
819
820 **** Pop-up menu. What is useful? Tag a region (should be greyed out if
821 the region is not balanced). Suggestions based on error messages.
822
823 **** Have configurable list of namespace URIs so that we can provide
824 namespace URI completion on extension elements or with schema-less documents.
825
826 **** Allow validation to handle XInclude.
827
828 **** ID/IDREF support.
829
830 *** Completion
831
832 **** Make it work with icomplete. Only use a function to complete when
833 some of the possible names have undeclared namespaces.
834
835 **** How should C-return in mixed text work?
836
837 **** When there's a vacuous schema, C-return after < will insert the end-tag.
838 Is this a bug or a feature?
839
840 **** After completing start-tag, ensure we don't get unhelpful message
841 from validation
842
843 **** Syntax table for completion.
844
845 **** Should complete start-tag name with a space if namespace attributes
846 are required.
847
848 **** When completing start-tag name with no prefix and it doesn't match
849 should try to infer namespace from local name.
850
851 **** Should completion pay attention to characters after point? If so, how?
852
853 **** When completing start-tag name, add required atts if only one required
854 attribute.
855
856 **** When completing attribute name, add attribute value if only one value
857 is possible.
858
859 **** After attribute-value completion, insert space after close delimiter
860 if more attributes are required.
861
862 **** Complete on enumerated data values in elements.
863
864 **** When in context that allows only elements, should get tag
865 completion without having to type < first.
866
867 **** When immediately after start-tag name, and name is valid and not
868 prefix of any other name, should C-return complete on attribute names?
869
870 **** When completing attributes, more consistent to ignore all attributes
871 after point.
872
873 **** Inserting attribute value completions needs to be sensitive to what
874 delimiter is used so that it quotes the correct character.
875
876 **** Complete on encoding-names in XML decl.
877
878 **** Complete namespace declarations by searching for all namespaces
879 mentioned in the schema.
880
881 *** Well-formed XML support
882
883 **** Deal better with Mule-UCS
884
885 **** Deal with UTF-8 BOM when reading.
886
887 **** Complete entity names.
888
889 **** Provide some support for entity names for MathML.
890
891 **** Command to repeat the last tag.
892
893 **** Support for changing between character references and characters.
894 Need to check that context is one in which character references are
895 allowed. xmltok prolog parsing will need to distinguish parameter
896 literals from other kinds of literal.
897
898 **** Provide a comment command to bind to M-; that works better than the
899 normal one.
900
901 **** Make indenting in a multi-line comment work.
902
903 **** Structure view. Separate buffer displaying element tree.
904 Be able to navigate from structure view to document and vice-versa.
905
906 **** Flash matching >.
907
908 **** Smart selection command that selects increasingly large syntactically
909 coherent chunks of XML. If point is in an attribute value, first
910 select complete value; then if command is repeated, select value plus
911 delimiters, then select attribute name as well, then complete
912 start-tag, then complete element, then enclosing element, etc.
913
914 **** ispell integration.
915
916 **** Block-level items in mixed content should be indented, e.g:
917 <para>This is list:
918 <ul>
919 <li>item</li>
920
921 **** Provide option to indent like this:
922 <para>This is a paragraph
923 occupying multiple lines.</para>
924
925 **** Option to add make a / that closes a start-tag electrically insert a
926 space for the XHTML guys.
927
928 **** C-M-q should work.
929
930 *** Datatypes
931
932 **** Figure out workaround for CJK characters with regexps.
933
934 **** Does category C contain Cn?
935
936 **** Do ENTITY datatype properly.
937
938 *** XML Parsing Library
939
940 **** Parameter entity parsing option, nil (never), t (always),
941 unless-standalone (unless standalone="yes" in XML declaration).
942
943 **** When a file is currently being edited, there should be an option to
944 use its buffer instead of the on-disk copy.
945
946 *** Handling all XML features
947
948 **** Provide better support for editing external general parsed entities.
949 Perhaps provide a way to force ignoring undefined entities; maybe turn
950 this on automatically with <?xml encoding=""?> (with no version
951 pseudo-att).
952
953 **** Handle internal general entity declarations containing elements.
954
955 **** Handle external general entity declarations.
956
957 **** Handle default attribute declarations in internal subset.
958
959 **** Handle parameter entities (including DTD).
960
961 *** RELAX NG
962
963 **** Do complete schema checking, at least optionally.
964
965 **** Detect include/external loops during schema parse.
966
967 **** Coding system detection for schemas. Should use utf-8/utf-16 per the
968 spec. But also need to allow encodings other than UTF-8/16 to support
969 CJK charsets that Emacs cannot represent in Unicode.
970
971 *** Catching XML errors
972
973 **** Check public identifiers.
974
975 **** Check default attribute values.
976
977 *** Performance
978
979 **** Explore whether overlay-recenter can cure overlays performance problems.
980
981 **** Cache schemas. Need to have list of files and mtimes.
982
983 **** Make it possible to reduce rng-validate-chunk-size significantly,
984 perhaps to 500 bytes, without bad performance impact: don't do
985 redisplay on every chunk; pass continue functions on other uses of
986 rng-do-some-validation.
987
988 **** Cache after first tag.
989
990 **** Introduce a new name class that is a choice between names (so that
991 we can use member)
992
993 **** intern-choice should simplify after patterns with same 1st/2nd args
994
995 **** Large numbers of overlays slow things down dramatically. Represent
996 errors using text properties. This implies we cannot incrementally
997 keep track of the number of errors, in order to determine validity.
998 Instead, when validation completes, scan for any characters with an
999 error text property; this seems to be fast enough even with large
1000 buffers. Problem with error at end of buffer, where there's no
1001 character; need special variable for this. Need to merge face from
1002 font-lock with the error face: use :inherit attribute with list of two
1003 faces. How do we avoid making rng-valid depend on nxml-mode?
1004
1005 *** Error recovery
1006
1007 **** Don't stop at newline in looking for close of start-tag.
1008
1009 **** Use indentation to guide recovery from mismatched end-tags
1010
1011 **** Don't keep parsing when currently not well-formed but previously
1012 well-formed
1013
1014 **** Try to recover from a bad start-tag by popping an open element if
1015 there was a mismatched end-tag unaccounted for.
1016
1017 **** Try to recover from a bad start-tag open on the hypothesis that there
1018 was an error in the namespace URI.
1019
1020 **** Better recovery from ill-formed XML declarations.
1021
1022 *** Useability improvements
1023
1024 **** Should print a "Parsing..." message during long movements.
1025
1026 **** Provide better position for reference to undefined pattern error.
1027
1028 **** Put Well-formed in the mode-line when validating against any-content.
1029
1030 **** Trim marking of illegal data for leading and trailing whitespace.
1031
1032 **** Show Invalid status as soon as we are sure it's invalid, rather than
1033 waiting for everything to be completely up to date.
1034
1035 **** When narrowed, Valid or Invalid status should probably consider only
1036 validity of narrowed region.
1037
1038 *** Bug fixes
1039
1040 **** Need to give an error for a document like: <foo/><![CDATA[ ]]>
1041
1042 **** Make nxml-forward-balanced-item work better for the prolog.
1043
1044 **** Make filling and indenting comments work in the prolog.
1045
1046 **** Should delete RNC Input buffers.
1047
1048 **** Figure out what regex use for NCName and use it consistently,
1049
1050 **** Should have not-well-formed tokens in ref.
1051
1052 **** Require version in XML declaration? Probably not because prevents
1053 use for external parsed entities. At least forbid standalone without version.
1054
1055 **** Reject schema that compiles to rng-not-allowed-ipattern.
1056
1057 **** Move point backwards on schema parse error so that it's on the right token.
1058
1059 *** Internal
1060
1061 **** Use rng-quote-string consistently.
1062
1063 **** Use parsing library for XML to texinfo conversion.
1064
1065 **** Rename xmltok.el to nxml-token.el. Use nxml-t- prefix instead of
1066 xmltok-. Change nxml-t-type to nxml-t-token-type, nxml-t-start to
1067 nxml-t-token-start.
1068
1069 **** Can we set fill-prefix to nil and rely on indenting?
1070
1071 **** xmltok should make available replacement text of entities containing
1072 elements
1073
1074 **** In rng-valid, instead of using modification-hooks and
1075 insert-behind-hooks on dependent overlays, use same technique as nxml-mode.
1076
1077 **** Port to XEmacs. Issues include: Unicode (XEmacs seems to be based on
1078 Mule-UCS); overlays/text properties vs extents; absence of
1079 fontification-functions hook.
1080
1081 *** Fontification
1082
1083 **** Allow face to depend on element qname, attribute qname, attribute
1084 value. Use list with pairs of (R . F), where R specifies regexps and
1085 F specifies faces. How can this list be made to depend on the document type?
1086
1087 *** Other
1088
1089 **** Support RELAX NG XML syntax (use XML parsing library).
1090
1091 **** Support W3C XML Schema (use XML parsing library).
1092
1093 **** Command to infer schema from current document (like trang).
1094
1095 *** Schemas
1096
1097 **** XSLT schema should take advantage of RELAX NG to express cooccurrence
1098 constraints on attributes (e.g. xsl:template).
1099
1100 *** Documentation
1101
1102 **** Move material from README to manual.
1103
1104 **** Document encodings.
1105
1106 *** Notes
1107
1108 **** How can we allow an error to be displayed on a different token from
1109 where it is detected? In particular, for a missing closing ">" we
1110 will need to display it at the beginning of the following token. At the
1111 moment, when we parse the following token the error overlay will get cleared.
1112
1113 **** How should rng-goto-next-error deal with narrowing?
1114
1115 **** Perhaps should merge errors having same start position even if they
1116 have different ends.
1117
1118 **** How to handle surrogates? One possibility is to be compatible with
1119 utf8.e: represent as sequence of 4 chars. But utf-16 is incompatible
1120 with this.
1121
1122 **** Should we distinguish well-formedness errors from invalidity errors?
1123 (I think not: we may want to recover from a bad start-tag by implying
1124 an end-tag.)
1125
1126 **** Seems to be a bug with Emacs, where a mouse movement that causes
1127 help-echo text to appear counts as pending input but does not cause
1128 idle timer to be restarted.
1129
1130 **** Use XML to represent this file.
1131
1132 **** I had a TODO which said simply "split-string". What did I mean?
1133
1134 **** Investigate performance on large files all on one line.
1135
1136 *** Issues for Emacs versions >= 22
1137
1138 **** Take advantage of UTF-8 CJK support.
1139
1140 **** Supply a next-error-function.
1141
1142 **** Investigate this NEWS item "Emacs now tries to set up buffer coding
1143 systems for HTML/XML files automatically."
1144
1145 **** Take advantage of the pointer text property.
1146
1147 **** Leverage char-displayable-p.
1148
1149 * Internal changes
1150
1151 ** Cleanup all the GC_ mark bit stuff -- there is no longer any distinction
1152 since the mark bit is no longer stored in the Lisp_Object itself.
1153
1154 ** Refine the `predicate' arg to read-file-name.
1155 Currently, it mixes up the predicate to apply when doing completion and the
1156 one to use when terminating the selection.
1157
1158 ** Merge ibuffer.el and buff-menu.el.
1159 More specifically do what's needed to make ibuffer.el the default,
1160 or just an extension of buff-menu.el.
1161
1162 ** Use pcomplete by default in shell-mode.
1163 This means to make it behave (by default) more like the current code.
1164 Use it also for read-shell-command, M-x compile, ...
1165
1166 ** Merge sendmail.el and messages.el.
1167 Probably not a complete merge, but at least arrange for messages.el to be
1168 a derived mode of sendmail.el. Or arrange for messages.el to be split
1169 into a small core and "the rest" so that we use less resources as long as
1170 we stick to the features provided in sendmail.el.
1171
1172 ** Replace gmalloc.c with the modified Doug Lea code from the current
1173 GNU libc so that the special mmapping of buffers can be removed --
1174 that apparently loses under Solaris, at least. [fx has mostly done
1175 this.]
1176
1177 ** Rewrite make-docfile to be clean and maintainable.
1178
1179 ** Add an inferior-comint-minor-mode to capture the common set of operations
1180 offered by major modes that offer an associated inferior
1181 comint-derived mode. I.e. basically make cmuscheme.el/inf-lisp.el generic.
1182 For use by sml-mode, python-mode, tex-mode, scheme-mode, lisp-mode,
1183 haskell-mode, tuareg-mode, ...
1184
1185 ** Make SYNC_INPUT the default. [true since 2008-03-11]
1186 All loops using immediate_quit need to be checked to ensure that
1187 C-g can interrupt them, in case of an infinite loop. Once we
1188 switch to using SYNC_INPUT, we can remove the BLOCK_INPUTs in the
1189 allocation functions (allocate_string etc.) without worrying about
1190 data munging.
1191
1192 ** Add "link" button class
1193 Add a standard button-class named "link", and make all other link-like
1194 button classes inherit from it. Set the default face of the "link" button
1195 class to the standard "link" face.
1196
1197 * Other known bugs:
1198
1199 ** `make-frame' forgets unhandled parameters, at least for X11 frames.
1200
1201 ** a two-char comment-starter whose two chars are symbol constituents will
1202 not be noticed if it appears within a word.
1203
1204 ** Fix unexelf.c to handle the .data.rel and .data.rel.local
1205 sections made by GCC 3.4 on IRIX.
1206
1207 \f
1208 This file is part of GNU Emacs.
1209
1210 GNU Emacs is free software: you can redistribute it and/or modify
1211 it under the terms of the GNU General Public License as published by
1212 the Free Software Foundation, either version 3 of the License, or
1213 (at your option) any later version.
1214
1215 GNU Emacs is distributed in the hope that it will be useful,
1216 but WITHOUT ANY WARRANTY; without even the implied warranty of
1217 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1218 GNU General Public License for more details.
1219
1220 You should have received a copy of the GNU General Public License
1221 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
1222