home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / elvis22g.zip / BUGS next >
Text File  |  2002-04-10  |  156KB  |  3,368 lines

  1. REPORT BUGS TO kirkenda@cs.pdx.edu (STEVE KIRKENDALL)
  2.  
  3. NOTE: Each bug in this file is marked with either "*", "/", or "?".
  4. The "*" means the bug is still pending.  The "/" means that I believe it has
  5. been solved.  A "?" means that I've done some work on it, and *hope* it is
  6. solved because it seems to work better but I never really understood what
  7. was wrong in the first place.  A "?" will become a "/" if I don't receive
  8. more reports of that bug.  More than 90% of this file lists *fixed* bugs.
  9.  
  10. NOTE: Not all of these are truly bugs.  This file also serves as my "to do"
  11. list, so some items are just unimplemented features that sounded like a good
  12. idea at one time or another.
  13.  
  14.  
  15. * After :lpr, the "# pages" message goes away too fast.  This only happens
  16.   when printing to a pipe, not a file.
  17.  
  18. * In "html" display mode, too many operations change the font back to normal.
  19.  
  20. * Apparently "elvis -Gx11" doesn't always exit when X does -- it can get
  21.   stuck in a loop where it uses all available CPU.
  22.  
  23.     Xlib normally kills the application when the connection to the server
  24.     goes down unexpectedly.  Elvis will sometimes disable that behavior
  25.     during initialization -- perhaps it doesn't enable it afterward?
  26.  
  27. * Windows problems:
  28.   * The "idle" color isn't used for the last elvis window when focus shifts
  29.     to some other application.
  30.   * In Options->Font, the "Font style" is ignored -- can we remove it?
  31.   * WinElvis died while resizing, when it tried to refresh the screen.
  32.  
  33. * Potential for some minor problems with parsing regular expressions, when
  34.   magicchar is set to something weird.  Specifically, some parts of regbuild()
  35.   and gettoken() assume that '[', '^', and '$' are always in magicchar.  If
  36.   they aren't, then odd (though non-fatal) things will happen.
  37.  
  38. * RFC1345 defines digraphs?  Maybe lib/elvis.dig should be modified to use
  39.   those digraphs instead of the ones that I just made up.
  40.  
  41. * When editing the source-code for man pages, there is a bug in the handling
  42.   of { and } paragraph commands, which affects the "ap" and "ip" text objects:
  43.   If the cursor is on the '.' of a .PP or .SH command, then the paragraph seems
  44.   to include the PRECEDING text instead of the CURRENT AND FOLLOWING text.
  45.  
  46. * Compatibility issue: The `m command should move the cursor back to the
  47.   same column, not the same character.  I.e., it shouldn't care whether any
  48.   text has been inserted or deleted on that line before the mark.  To test,
  49.   go onto a long line and type 40|mm20|10x`m  -- this should leave the cursor
  50.   in column 40, but elvis moves to column 30.
  51.  
  52. * :10,20s/foo/bar/3 should change lines 20 through 22 -- i.e., 3 lines starting
  53.   at the last line in the range.  Elvis ignores the count when given a range,
  54.   which is wrong.
  55.  
  56. * :g/^/j should join pairs of lines (it does in the real vi and vim), but
  57.   instead it joins all lines together into a single line.
  58.  
  59. * The S command looses the last indentation character when autoindent is set.
  60.   Also, c_ (which is what S does) works the first time, but . doesn't, if the
  61.   new text was empty.  If the new text was not empty, then . looses indent.
  62.  
  63. * When pasting rectangles at the ends of lines, elvis doesn't try to pad
  64.   the lines so the rectangle keeps its shape.  Vim does.
  65.  
  66. * <img src=...> tags don't work except in HTTP: URLs?
  67.  
  68. * Should elvis.syn's "documentation" line be extended to support Java?  This
  69.   isn't a critical as Perl's POD text since Java's embedded documentation is
  70.   otherwise displayed as a normal comment anyway.
  71.  
  72. * Some quirks have been reported in the text-mode Win32 version of elvis,
  73.   when running under Windows2000.  The cursor is sometimes left in the wrong
  74.   place when elvis exits, and while running elvis the ex history is displayed
  75.   incorrectly.
  76.  
  77. * Change the meanings of some commands when a visual selection is pending:
  78.     * s    Like c (rect repeats the change for each line)
  79.     * C    Change whole lines (except rect changes from left edge)
  80.     * S    Change whole lines
  81.     * D    Delete whole lines (except rect deletes from left edge)
  82.     * X    Delete whole lines [:map select X :d^M -- but cut buffers?]
  83.     * Y    Yank whole lines [:map select Y :y^M -- but cut buffers?]
  84.     * I    Insert at left edge (for rect, do it to each line)
  85.     * A    Append at right edge (for rect, do it to each line)
  86.  
  87. * Some useful 'g' commands that elvis doesn't support yet:
  88.     * gv    reselect previously highlighted text
  89.     * ge    go backward to end of previous word.
  90.     * gE    go backward to end of previous WORD
  91.  
  92. * Some useful 'z' commands that elvis doesn't support yet:
  93.     * zh    sidescroll leftward.  If cursor forced off right edge, move it.
  94.     * zl    sidescroll rightward.  If cursor forced off left edge, move it.
  95.     * zs    sidescroll to move cursor's column to left edge
  96.     * ze    sidescroll to move cursor's column to right edge
  97.  
  98. * Maybe add vim's "scrolloff" option.  It causes scrolling to occur when the
  99.   cursor is a few lines away from the top or bottom of the window, so you
  100.   always have a few lines visible around the cursor.
  101.  
  102. * Refine the way that proportional fonts are used.  If the proportional text
  103.   is wider than fixed-pitch text (which should be rare) then still squeeze it
  104.   for PS and Windows.  But if narrower then don't stretch it.  Text in other
  105.   fonts should be drawn immediately after the end of the proportional text,
  106.   with one exception: The starting point for graphic text should be shifted
  107.   rightward if necessary, to the point it would be at if all preceding text
  108.   had been fixed-pitch.
  109.  
  110.   This will tie in nicely with the idea that indentation and tabs should be
  111.   drawn in a distinctive font.  If it is drawn as *graphic* spaces, then the
  112.   columns will line up correctly.
  113.  
  114. * When you mark a rectangle via ^V, and then run an ex command on the
  115.   highlighted text, elvis should IDEALLY limit the changes to the highlighted
  116.   columns.  This would be very difficult though, and it isn't at all clear
  117.   what some ex commands should do -- the ex command set is very line oriented.
  118.  
  119. * In "normal" display mode (and "syntax" too?), tabs (and any spaces that
  120.   follow a tab?) should be drawn in a distinctive font.  This is necessary
  121.   so that printing with ":color normal proportional" will still allow left
  122.   margins to be aligned.
  123.  
  124.   Similarly, in markup display modes, leading whitespace shouldn't be italic.
  125.   If italics are converted to underlined, then that'll cause the whitespace
  126.   to look like underscore characters.
  127.  
  128. * Maybe add an option that makes the <Tab> key use shiftwidth instead of
  129.   tabstop.  Or maybe allow inputtab=shift or something like that.  Vim
  130.   uses softtabstop as an alternate width, for both the <Tab> key and <BS>.
  131.  
  132. * It would be nice if the "showtags" option was clever enough to check the
  133.   tags file in some other directory, when editing a file in that directory.
  134.  
  135. * The "untar.c" program needs to convert ':' into something harmless on
  136.   Windows systems.  Windows doesn't allow ':' in a filename, except in a
  137.   drive letter.  Maybe use '_' instead?
  138.  
  139. * When reading an HTTP response that has a header, elvis should skip the
  140.   empty line that marks the end of the header.  It would also be nice if
  141.   the Content-Type line was stored for later use.
  142.  
  143. * The :fold command seems to confuse the :g command, perhaps because :fold
  144.   changes the meaning of "line".  The :unfold command is okay, though.  In
  145.   particular, this means you can't do this...
  146.  
  147.     :g/^{/,/^}/fold (current("tag"))
  148.  
  149.   ... but this works...
  150.  
  151.     :g/^{/,/^}/unfold (current("tag"))
  152.     :%fold!
  153.  
  154. * Need to update http://www.cs.pdx.edu/~kirkenda
  155.  
  156. * When lpcolumns!=columns, printing will often use the wrong font attributes
  157.   when printing text in a markup display mode.  Apparently the array of
  158.   line attributes is tripping it up.  NEWSFLASH: It can cause core dumps too.
  159.   Try setting lpcolumns=300, for example.
  160.  
  161.     This should go away with the new markup code (when written).
  162.     Until then, just be sure to ":let lpcolumns=columns" before printing.
  163.  
  164. * hlsearch doesn't mark all matches within a markup display mode.  Its
  165.   behavior is very consistent, in that it fails to highlight the same
  166.   instances each time.
  167.  
  168.     This would be hard to fix -- probably not worth the effort at this
  169.     time.  The ideal solution would involve modifying regexec() to search
  170.     across line boundaries.  The problem is caused by the fact that
  171.     markup display modes have a different definition of "end of line"
  172.     than the regexp matcher, so any text between a newline character
  173.     and the end of the "markup" line is unchecked.
  174.  
  175. * Giving too many "Hit <Enter> to continue" prompts.
  176.  
  177. * "spellsuffix" doesn't always work.  It seems to skip looking for base words
  178.   defined via :words -- it only checks the "spelldict" dictionary.  Example:
  179.   "GUI" is added via :words, and spellsuffix contains "'s", but "GUI's"
  180.   is still flagged as an error.
  181.  
  182.     I believe there are two things happening here.  First, it doesn't
  183.     look for the root word in the tags dictionary; this allows lowercase
  184.     "digraphs" to be flagged as an error even though "digraph" is accepted
  185.     because it is a tag.  This is not a bug.
  186.  
  187.     The second thing is that it looks up the root word in a case-
  188.     insensitive way (converting it to lowercase) so it doesn't find
  189.     the uppercase "GUI" when trying to check "GUI's".  This is a bug...
  190.     how to fix?
  191.  
  192. ? From Stephane Billiart:
  193.   There is a bug in the "configure" script -- it doesn't know that the
  194.   internet files are required even if the network protocols are not
  195.   used, with the "x11" interface.  Here's a patch that fixes it for Solaris...
  196.  
  197.     529,531c529
  198.     <       why "   to ensure that 'const' is ignored.  Also, if X11 is to be supported then"
  199.     <       why "   we also need -lsocket -lnsl.  A -R flag may also be added so the X11"
  200.     <       why "   shared libraries can be found at run time."
  201.     ---
  202.     >       why "   to ensure that 'const' is ignored."
  203.     535a534,535
  204.     >               why "For Solaris2, X11 requires -lsocket -lnsl.  A -R flag may also"
  205.     >               why "   be added so the X11 shared libraries can be found at run time."
  206.     538a539,542
  207.     >       elif [ X"$inet" != X ]
  208.     >       then
  209.     >               why "For Solaris2, any network access needs -lsocket -lnsl"
  210.     >               TLIBS="$TLIBS -lsocket -lnsl"
  211.  
  212.   Okay, here's my question: How could the network files be present but not
  213.   used?  The "configure" script always uses HTTP and FTP if the network files
  214.   are present, so that should always cause those files to be included under
  215.   Solaris, right?  Or does Solaris sometimes have the libraries but not the
  216.   header files?
  217.  
  218. ? The :au command doesn't accept {...} notation for multi-line commands.
  219.  
  220.     This is probably more trouble than it's worth.  Because the syntax
  221.     for :au is so different from every other ex command, ex_autocmd()
  222.     must parse the args itself.  To get the normal ex command parser to
  223.     hand off unparsed arguments to ex_autocmd(), the cmdnames[] array
  224.     just says its entire argument string is a single command line.
  225.     So unless the whole command line starts with a '{' at the end of a
  226.     line, elvis will treat it as a one-line command.  Period.  Fixing
  227.     this would require major changes to the parser in ex.c, purely for
  228.     the benefit of this single, rarely-used command, for an elvis-only
  229.     extension.
  230.  
  231. ? Non-HTML URLs are loosing their FORM parameters.  This is a problem,
  232.   because user-defined protocols such as mailto: need parameters.
  233.  
  234.     Hmm... I remember seeing this problem, but it seems to working now.
  235.     Either I fixed it and forgot to cross of this item, or I had added
  236.     it twice and only crossed off one copy.  Or I guess I could have
  237.     fixed accidentally while making some other change, I suppose.
  238.  
  239. ? When writing via FTP, can't overwrite an existing file, even with ":w!".
  240.  
  241.     I was unable to reproduce this; it worked fine for me.  Perhaps the
  242.     person who submitted this bug was leaving off the "~user" part of
  243.     the URL?
  244.  
  245. ? When running a program via :!cmd, the last line isn't printed unless it
  246.   ends with a linefeed.
  247.  
  248.     I tried this, and it works okay for me.  Running "perl -e 'print 5'"
  249.     does indeed show "5" -- with "Hit <Enter> to continue" appended,
  250.     as one would expect.  I suspect this is a buffering problem in the
  251.     cmd, not in elvis.
  252.  
  253. ? Can't interrupt a looped :s command.  Not sure why.  Apparently guipoll()
  254.   doesn't work correctly, at least with the "x11" interface.
  255.  
  256.     Oh, now it seems to be working again.  Damn.
  257.  
  258. ? Ex scripts sometimes dump core.  Here's an example from Kris Wehner:
  259.       ex - /usr/local/apache/conf/httpd.conf << EOF 
  260.       /^# LoadModule foo_module/a
  261.       LoadModule ct_auth_module libexec/libct_apache_plugin.so
  262.       AddModule ct_apache_mod.c
  263.       .
  264.       wq!
  265.       EOF
  266.  
  267.     I tried this on my system with 2.2d-alpha and it worked perfectly.
  268.     I can't think of anything I changed that could explain why it works
  269.     now, though, so I'm kind of worried.  Perhaps I should try it on
  270.     a Solaris machine...
  271.  
  272. ? The :foldc alias has been reported to cause core dumps on some files --
  273.   specifically, the gdb/infrun.c file from gdb-5.0's source.
  274.  
  275.     I downloaded the source for GDB 5.0, but was unable to reproduce this.
  276.     I suspect the core dump was caused by a bug in the :normal command,
  277.     which the :foldc alias uses.  That bug is fixed in 2.2d.
  278.  
  279. -------------------------------------------------------------------------------
  280. Fixed in 2.2g-beta:
  281.  
  282. / The spell-checker didn't like words that start with '_', even though
  283.   tag names often do.
  284.  
  285. / Maybe allow lpheader font to be controlled via ":color header" ?  Still
  286.   make it default to "fixed underlined", but some users might prefer boxed.
  287.  
  288.     Actually, it was already doing that for non-markup modes.  I tweaked
  289.     the markup modes to do the same, and documented it.
  290.  
  291. / Gnome patches from Klaus Elsbernd, needed for compiling the gnome interface
  292.   with a non-GCC compiler, and run in SunOS
  293.  
  294. / ctags *needs* support for "enum".  And probably "class" wouldn't be too hard.
  295.  
  296. / ctags needs to reset the class hint when switching from one file to another.
  297.  
  298. / The show=link option is slow if there are no <a ...> tags shortly before
  299.   the cursor position.  It should probably stop looking if it sees a tag
  300.   which is a paragraph/section marker.
  301.  
  302.     I thought I had this one fixed, but apparently the fix wasn't good
  303.     enough.
  304.  
  305. / ":map" doesn't list cursor key maps, and even some user maps such as "gw".
  306.   Actually, I kind of like the fact that it omits cursor keys since the user
  307.   probably already knows what they're mapped to, and it's nice to avoid clutter.
  308.   But there should be *SOME* way to see them.
  309.  
  310.       Fixed.  Also made ":map" list non-cursor keys, while ":map all" lists
  311.       all maps including cursor keys.
  312.  
  313. / Use mapmode to make <Enter> follow a link in HTML.  Maybe also use <space>
  314.   to page forward.
  315.  
  316. / "map mode=html ^V  ^F" isn't saved correctly.
  317.  
  318. / Don't set hlspell for the help files.  Why embarrass myself?
  319.  
  320. / Elvis dumps core in a C++ file (or C header file) that starts with a comment
  321.   if the "showlink" option is set.
  322.  
  323. / "show=link" shouldn't affect any display modes other than "html".
  324.  
  325. / The :r command displays the number of lines read, even if report=0
  326.  
  327. / In "hex" mode, the line before the column headings is in a funny font.
  328.   This only shows up when you do a ":sp file.bin" on a binary file; as soon
  329.   as any event causes the screen to be redrawn, it looks okay.
  330.  
  331. / The "modified, not saved" message uses filename, should show bufname.
  332.  
  333. / There's a bug which causes a core dump when "theme:parchment" is loaded.
  334.  
  335.     Apparently this is in the "1;/^BEGIN /,$d" command, which deletes
  336.     everything but the initial comment.  I suspect that it is failing
  337.     because the last block is deleted, in a buffer which requires
  338.     multiple blklist blocks.  (The "parchment" theme is the biggest
  339.     one.)
  340.  
  341.     If I run that command manually it doesn't dump core...  until the
  342.     third time!  This suggests that buffer cloning may be involved.
  343.  
  344.     SOLVED!  It took six hours, but I finally found bug in lowbuf.c's
  345.     delblock() function, when a buffer is big enough to require a chain
  346.     of BLKLIST blocks.  To delete a CHARS block in the n'th BLKLIST block,
  347.     it was copying the first item from the n+1'th BLKLIST block and then
  348.     recursively calling delblock() to shift the n+1'th block (and any later
  349.     ones, the same way).  But delblock() frees the deleted CHARS block,
  350.     so I have INCREMENT THE ALLOCATION COUNT FOR THAT BLOCK BEFORE THE
  351.     RECURSIVE CALL!
  352.  
  353. / For the termcap interface, the "italic" attribute can interfere with
  354.   colors.  It is implemented as "half brightness", which Linux's console,
  355.   for one, can't do in color.
  356.  
  357.     Added a "ttyitalic" option, similar to "ttyunderline".
  358.  
  359. / Changing the 'background' option should cause colors to be reevaluated,
  360.   if the actual background color is unknown.  This would mostly benefit
  361.   the "termcap" interface, since the GUI interfaces always know exactly
  362.   which background color they're using.
  363.  
  364.     Basically, this action could be done by calling recolor() for any
  365.     font which has no "like" clause.  (The "like" fonts will automatically
  366.     be reevaluated when the font that they're like is reevaluated.)
  367.     Triggering this action will require writing a custom option-setting
  368.     function.
  369.  
  370. / The MS-DOS version has a hard time using bright colors for "normal" plus
  371.   other things: color normal yellow|color comment bright green.
  372.  
  373. / Modelines don't work?
  374.  
  375.     This was because the first "1,5s/ex:\(.*\):/\1/x" was failing, which
  376.     prevented the elvis.arf script from continuing with the second
  377.     "$-4,$s/ex:\(.*\):/\1/x" command.
  378.  
  379. / "safer" mode is too strict.  Disallowing :alias and :autocmd causes problems
  380.   in the initialization scripts.
  381.  
  382.   / Make elvis.ini check "safer" before running elvis.ali
  383.   / Make :augroup be unsafe, so the script generated by :mkexrc will work
  384.     whether safer is on or not.
  385.  
  386. / Weird problem with PERL doc lines.  See Merijn's example.
  387.  
  388.     This was caused by a scanalloc() call without a matching scanfree(),
  389.     in dmsyntax.c.  Each screen update left one more scan context lying
  390.     around, and that caused elvis' buffer functions to get confused --
  391.     there should never be any scan contexts active when the buffer is
  392.     changed.  There are assert() statements to verify this, but those
  393.     are normally disabled, so that's why this looked subtle.
  394.  
  395. / Shouldn't draw guide lines on ex scrolled rows at bottom of window.
  396.  
  397.     Fixed, in an interesting way.  I added a new text face, "bottom",
  398.     and made it immune to guide lines.  All ex commands and their output
  399.     are drawn in this font, so they don't get guide lines.
  400.  
  401. / Make "smartargs" be a buffer option?  Sometimes there will never be tags
  402.   for functions; e.g., in HTML source where "functions" are really tag
  403.   parameters.  Searching for a nonexistent tag can take a while!
  404.  
  405.     Done.  Also modified "elvis.arf" to turn off smartargs for html.
  406.  
  407. / If you delete the last character from "boxed" text, the right edge of the
  408.   box is not redrawn in its new location.  The box appears to be open-ended.
  409.  
  410. / Add a BgChanged event for :autocmd.
  411.  
  412. / add a "showface" option, which shows the name of the current font.  Maybe
  413.   also add a current("face") function which returns the name of the face at
  414.   the current cursor position.  If the face is a combination, then return "".
  415.  
  416.     Added...
  417.         current("face")
  418.         current("background")
  419.         color("name")
  420.         color("name","fg")
  421.         color("name","bg")
  422.         color("name","like")
  423.  
  424.     Replaced many showXXX options with a single versatile "show" option.
  425.     file, tag, cmd, face, link, spell, region
  426.  
  427. / The 'x' flag of the :s command should move the cursor to the current line
  428.   before evaluating the command.  This affects the readTHEME alias.
  429.  
  430.     This is very quirky.  The bug mostly resides in parsewindowid(), but
  431.     really it is just a manifestation of the fact that my ex parser doesn't
  432.     allow ex commands to specify a cursor position -- it tries to use the
  433.     window's cursor, or the top of bufdefault.  I think in readTHEME, it
  434.     is using the latter.
  435.  
  436.     Fixed!  I just made sure that x's quirks matched parsewindowid()'s.
  437.  
  438. / Some easy ideas for background images in X11:
  439.   / Allow background color names to contain either a simple color name, or
  440.     the name of an image file, or both.  When both are given, use the simple
  441.     color to "tint" the image.  Return a pseudo-colorcode.  Also return the
  442.     average RGB value of the image, so contrasting foregrounds can be chosen.
  443.   / When an unscrollable image is being used, GUI->scroll() should always fail.
  444.  
  445. / problems with partially specifying the "normal" color, and probably
  446.   any of the special colors -- When you run :mkexrc it only remembers the
  447.   most recent partial color specification.
  448.  
  449. / The "or color" clause can be chosen before the background is set. E.g.,
  450.   ":color normal black or white on black" chooses the new foreground based
  451.   on the old background.
  452.  
  453.     Note that this is related to the "partial specify" problem -- the
  454.     only reason for specifying "or" colors with the background is so
  455.     that you'll be prepared when the next foregroundless :color command.
  456.  
  457.     Possible combined solution: Write a parser which returns the foreground
  458.     and background colors AS STRINGS.  When doing this, treat the "or"
  459.     word as plain text, so it is included in the foreground string for
  460.     later processing.  Other attributes are returned as flags.  When
  461.     doing a partial specification, parse both the old & new attribute
  462.     strings; if the new one omitted a foreground or background, then
  463.     use the foreground or background from the old string.  Process the
  464.     background first, so the proper "or" color can be chosen.  Regenerate
  465.     the combined text by using the foreground & background strings,
  466.     with flags generated from the attribute bits.
  467.  
  468. / In "x11", a bold 'm' leaves bits to the left it its character cell --
  469.   maybe clip the cell?  It would make scrolling look better.  However,
  470.   italic characters often slop to the right, which apparently produces far
  471.   fewer problems, so the clipping should only be on the left.
  472.  
  473. / Make WinElvis read its color names from a file, preferably in the same
  474.   format as /usr/X11R6/lib/X11/rgb.txt
  475.  
  476. / ":help ex" fails.  It tries to load "elvisex.html" in the current directory.
  477.  
  478. / Describe the meaning of ";" in ex addresses.
  479.  
  480. / The postscript print driver uses the video colors, not the carefully chosen
  481.   lp colors.
  482.  
  483. / It is so tempting to give only one foreground color, I really should add an
  484.   "lpcontrast" option.
  485.  
  486. / For the sake of uniformity, x11's "normalfont" option should be renamed to
  487.   just plain "font", like in Windows.
  488.  
  489. / ":help set ttyunderline" doesn't go to the ttyunderline message, unless
  490.   you're using the "termcap" interface.  I wouldn't expect name completion
  491.   to work, but you should at least be able to give the full name and find it.
  492.  
  493. / "nottyunderline" shouldn't completely disable the use of underline --
  494.   still try to use it if no background color has been set.  This will allow
  495.   the window separator to be red.
  496.  
  497.     Actually, this is more of a personal preference.  But users who
  498.     prefer to have no redness in their window borders could just say
  499.     "color normal on black" so no harm is done.
  500.  
  501. / Can't use "bold" attribute to distinguish between normal/idle.  Elvis
  502.   appears to only be sensitive to the colors, not other attributes.
  503.  
  504. / Windows problems:
  505.   / The Options->Gui dialog can't change colors, and doesn't display the
  506.     colors of that have been set elsewhere.
  507.   / Text type names aren't sorted, and the label should probably be "face"
  508.     instead of "text type" anyway.
  509.   / Combo boxes should show more items.
  510.   / The Options->Syntax menu item crashes elvis.  It is obsolete anyway,
  511.     and should be deleted.
  512. / The :let command never triggers an OptChanged or OptSet autocmd event.
  513.  
  514. / Add "kvt" to the list of terminals recognized by -Gx11.  Also, the termcap
  515.   interface should assume "kvt" has a light background.
  516.  
  517. / "make install" should create the /usr/local/lib/elvis/tags file.
  518.  
  519. / The smartargs option doesn't allow a space before '('.
  520.  
  521. / Make the toolbar's colors be configurable via resources (instead of the
  522.   scrollbar), and then make the default settings of the scrollbar and
  523.   statusbar be "like toolbar".
  524.  
  525. / In the Windows, OS/2, and MS-DOS binary distributions, make the contents
  526.   of the "lib" directory be read-only.  This is important for making
  527.   ":set prefersyntax=writable" work right.
  528.  
  529. / Writing an anonymous file should never change the name of an INTERNAL buffer.
  530.   Currently, :mkexrc seems to do that.
  531.  
  532. / The "elvis untitled #n" buffer names should correspond to bufid numbers.
  533.   It's less confusing that way.
  534.  
  535. / In "termcap" interface, sometimes the hlsearch highlighting doesn't show
  536.   everything that it should.  This seems to depend on color settings.  See
  537.   samples/hlsearch.cpp for an example.
  538.  
  539.     Not a bug.  This is due to the interaction of "bold white" text and
  540.     "bright red" highlighting.  In the termcap interface, bold+bright
  541.     always results in bright white, regardless of whatever color you're
  542.     trying to use.
  543.  
  544. / For HP, the default level of optimization doesn't work in elvis.  Need to
  545.   make "configure" drop it to +O2.
  546.  
  547.     I tried changing the "configure" script to handle this, but I can't
  548.     test it myself.
  549.  
  550.     Merijn Brand reports that it does indeed work.
  551.  
  552. / Sometimes the cursor gets stuck at the bottom of the screen (not the status
  553.   line where ex commands are entered, but the last one normally used in visual
  554.   mode).  Hitting zz fixes this condition.
  555.  
  556.     This may be related to the "calling delimage() endlessly" bug, which
  557.     is now fixed.  The "stuck at bottom" bug hasn't occurred since that
  558.     fix.
  559.  
  560. -------------------------------------------------------------------------------
  561. Fixed in 2.2f-beta:
  562.  
  563. / Changing the "normal" background should cause all colors to be reevaluated,
  564.   so that "or color" can be chosen properly.  Merely switching a window from
  565.   "idle" to "normal" shouldn't do this -- only a ":color normal" command should.
  566.  
  567. / Hey!  ":color normal gray" changes the background to black, in -Gx11?
  568.   It should leave the color unchanged.
  569.  
  570. / Need a way to make maps that only apply in certain display modes, or
  571.   possibly some other factor.  Maybe add a "map=XXXX" flag, and a "map"
  572.   buffer option?  Or a generic "option=value" flag?  Maybe add a :mapgroup
  573.   command, like autocmd, and allow groups to be selectively enabled/disabled.
  574.  
  575.     I implemented this as a "mode=XXXX" flag, and a "mapmode" option.
  576.  
  577. / After running an external command, the termcap interface restores colors
  578.   BEFORE switching back to the edit screen, so the original screen colors
  579.   are clobbered.
  580.  
  581. / Make :alias list the user aliases, and :alias! list the system aliases.
  582.  
  583. / Make :alias indent aliases to reflect the control flow.
  584.  
  585. / Need a way for aliases to access the tail of a command.  The csh way to
  586.   do this would be to put a * after the digit, as in !:2* to access everything
  587.   except the first word.
  588.  
  589. / Can the Edit autocmd event be partially dependent on bufdo()?  Should it be?
  590.   This is desirable because it would reduce the number of events, but what if
  591.   somebody "moves" the cursor while in input mode?
  592.  
  593.     Actually, moving while in input mode should probably call bufdo()
  594.     anyway, so that individual changes can be undone.
  595.  
  596.     A more complex problem: global changes, via either :g or :%s.  There
  597.     should probably be flag added to each buffer, to indicate that Edit
  598.     events should occur more often than "undo" saves.
  599.  
  600. / Make the window title show the filename if there is one; else the buffer name.
  601.  
  602. / Add a way to mark regions.
  603.  
  604. / With "optimize" turned off, the : command causes hlobject text to be
  605.   highlighted weirdly.  I think this happens only when there are multiple
  606.   windows.  It tries to recolor the current window, using the temporary
  607.   fonts from the other window.
  608.  
  609.   Exposure events can be similarly weird, regardless of optimization.
  610.  
  611.     This might be solvable by comparing the color number against the
  612.     npermanent.  If >= then allocate a new temporary color with the
  613.     required attributes... BUT WHY SHOULD THAT BE NECESSARY?
  614.  
  615. / Make :mkexrc generate a script that uses :try instead of :if.  This is
  616.   important if FEATURE_CALC is turned off.
  617.  
  618. / Allow more features to be disabled via FEATURE_XXXX -- tags, regexp, etc.
  619.  
  620. / Modify the [[ and ]] commands to recognize functions that start with '{'
  621.   at the end of the function header line, instead of in column 1 of the
  622.   following line.  Assume function header lines are either unindented.
  623.   This notation is standard in GNU source code, Perl, and (oddly enough)
  624.   in elvis' own alias notation.  This should also affect the gd command.
  625.  
  626.     Done.  Also added "tweaksection" option to control it.
  627.  
  628. / The "locked" and "readonly" option should never be saved in ~/.elvisrc
  629.   Maybe other options too.
  630.  
  631. / Adding "tag=" to the status line had the unintended side-effect of adding
  632.   it to the result of current("tag") too.  And it looks uglier than I expected
  633.   anyway.  Since the real source of confusion is when both "showtag" and
  634.   "showspell" are set, it would probably be better to add numbers before
  635.   the showspell words.  This makes them distinctive, and also makes the gs
  636.   command easier to use.
  637.  
  638. / Add link anchors to example aliases in lib/elvistip.html.  Refer to them
  639.   in other parts of the manual.
  640.  
  641. / Bug in suffixes -- it searches random memory past the end of the suffix
  642.   list.
  643.  
  644. / Something is wrong with subscripts.  Try :calc "foo"[,2...];"ps".
  645.  
  646.     There were two bugs: The precedence of [] was too low, and non-numeric
  647.     arguments were being interpreted as an infinite list of 0's.
  648.  
  649. / The "x11" user interface dumps core.  Try "e2 exmake.c", ":sp ex.c", resize
  650.   the ex.c window to be 4 lines high, run ":window" or ":set".  This does not
  651.   dump core in the "termcap" interface.  It may be related to spell checking.
  652.  
  653.     I suspect this has something to do with static variables being set
  654.     with the expectation that one window will be used next, and then the
  655.     other one is winds up being used instead.  I say this because in at
  656.     least one occasion, the status line (below the text window) showed
  657.     the same tag name for both windows even though they were for different
  658.     buffers.
  659.  
  660.     Unfortunately, one side-effect of this is typically that the stack
  661.     is clobbered, so it is difficult to tell what's going wrong.
  662.  
  663.     FIXED!  It turns out that some important variables were being left
  664.     unset by drawopenedit().  The variables are normally set by the
  665.     drawupdate() function which calls updateimage().  But drawopenedit()
  666.     also calls updateimage(), so it had to set those variables too.
  667.  
  668. / It would be nice if ":make" didn't switch buffers if there's already a
  669.   buffer showing the erroneous file.
  670.  
  671. / There should be a way to disable spelling for each buffer.  This is partially
  672.   dependent upon whether the window is readonly or not, but it should be more
  673.   versatile than that.  Maybe replace the spelltags option.
  674.  
  675.     I simply made "hlspell" be a buffer option instead of a global one.
  676.     I also deleted the "spelltags" option since I no longer consider it
  677.     to be useful... or not useful enough to justify making users read
  678.     about it and understand it.
  679.  
  680. / Sometimes elvis gets stuck calling delimage() endlessly.  In the "termcap"
  681.   interface, if you start on an HTML file and then use :sp to load some other
  682.   file, then elvis gets stuck in an endless loop trying to update the HTML
  683.   window.
  684.  
  685.     Fixed!  This was happening because eventfocus() was calling draw()
  686.     for the original window, which in turn tried to draw it using the
  687.     "html" functions -- even though the cursor was still in the ex history
  688.     buffer at the time.
  689.  
  690. / Make the absolute() function be smart about ".." in path names.
  691.  
  692. / Elvis should recognize different paths to the same file.  This is important
  693.   because some compilers mess up names (javac, for one).
  694.  
  695.     The best solution here is probably related to the idea of giving each
  696.     window its own virtual current working directory.  But that's more
  697.     than I was planning to do for 2.2.  Instead, I can just make the bufname
  698.     option store the full pathname; then buffind() will find the existing
  699.     version of a buffer no matter how you express its filename.
  700.  
  701. / Add g<Tab> -- move backward to previous link.  Make GUIs map <Shift-Tab>
  702.   to g<Tab> if possible.
  703.  
  704. / Include /usr/dict/words in the windows binary distribution.
  705.  
  706. / Perl scripts aren't being recognized if they have no extension?
  707.  
  708.     Merijn Brand tells me this is due to the fact that he sets the
  709.     magicchar and magicperl options to make elvis use Perl-like regexps,
  710.     but the default elvis.arf script file tries to recognize Perl scripts
  711.     by using traditional vi regexps.
  712.  
  713.     There are two ways to solve this.  One is by resetting the magicchar
  714.     and magicperl options to their defaults at the start of each script
  715.     or alias -- either hardcode the equivalent of ":lo mac=^$.[* nomap"
  716.     or add a new OptLocal autocmd event to make it configurable.
  717.  
  718.     The other way is to add a special metacharacter which forces the
  719.     remainder of the regexp to be parsed using traditional syntax, and
  720.     then add that metacharacter to the start of the regexps in elvis.arf.
  721.     I'm thinking \V would be nice.  Maybe also support \Q...\E quoting?
  722.  
  723. / When pasting chars into an empty buffer, add a newline first.  This is
  724.   particularly important when pasting via the GUI, but it may also be
  725.   important for pasting between buffers.
  726.  
  727. / When searching for tags: if there are both a macro and a function with the
  728.   same tag name, use the function first.  This should probably be both an
  729.   optional flag in ctags, and the sorting behavior or :tag and the ref program.
  730.  
  731.     What if I just initialize the heuristic tables with a higher
  732.     preference for functions initially?  I'd need to do this in both
  733.     "ref" and "elvis".
  734.  
  735. / Add "color emphasized like bold" somewhere, for the benefit of syntax
  736.   coloring.
  737.  
  738.     Fixed a different way: Since syntax coloring fonts should be given
  739.     names that reflect their intended purpose, I modified elvis.syn to
  740.     use other font names, and then added "color" lines to define the
  741.     default appearance of those fonts.
  742.  
  743. / Termcap "transparent" background doesn't work with Eterm.  If some text
  744.   uses a different background, then the display code doesn't switch back
  745.   to normal afterward.
  746.  
  747. -------------------------------------------------------------------------------
  748. Fixed in 2.2d-alpha:
  749.  
  750. / The "howto.html" file doesn't look good in Netscape.  This is due to the
  751.   ugliness of the non-elvis <dt><dd> list.
  752.  
  753. / The "showspell" option shouldn't suggest natural words where only tags are
  754.   allowed.  For example, when editing source code, it shouldn't suggest natural
  755.   words when the cursor is on a variable.
  756.  
  757. / The newbuffer() function and :file command can both create different buffers
  758.   with the same bufname.  So can writing an anonymous buffer out to a file.
  759.  
  760. / Change the "showname" and "showtag" options' display formats to prefix
  761.   their value with "file=" or "tag=" -- there are so many different things
  762.   that can be shown down there that it can get confusing.  Oh, and maybe
  763.   rename "showname" to "showfile".
  764.  
  765. / Make :mkexrc save aliases.
  766.  
  767. ? Occasionally, elvis will mess up the session file.  When this happens, the
  768.   screen looks normal but the cursor doesn't move correctly.  I think this is
  769.   a recent bug -- added after 2.2d.
  770.  
  771.     Maybe this has something to do with the message queue?  Elvis doesn't
  772.     allow buffers to be modified while a scan operation is pending.  The
  773.     (Elvis message queue) buffer is used for queuing messages, so it is
  774.     modified each time a message is generated.
  775.  
  776.   FIXED? There was a bug in the indentation code, used by the shift commands
  777.     and autoindent, among other things.  It was mixing scan operations
  778.     with changes.  Also, wordatcursor(), used by the spell checker among
  779.     other things, was sometimes neglecting to free a scan context when
  780.     it was done, which eventually caused large numbers of scan contexts
  781.     to accumulate.
  782.  
  783. / Need a way to fire off commands when certain events happen.  Maybe vim's
  784.   ":au" command, or something related to the :gui command which already runs
  785.   events for GUI events.  Combine them somehow?  The immediate goal is to
  786.   provide a way for a [buffer] menu to change when buffers are created or
  787.   deleted.
  788.  
  789. / In XFree86 4.0, the "x11" interface's toolbar hints have an extra character
  790.   on the end -- maybe not trimming newline?
  791.  
  792. / Maybe add "transparent" as a termcap background color -- it will just
  793.   reset the colors via \E[m and then not set a background.  This will allow
  794.   you to specify some background colors while still leaving others set to
  795.   the default.  It won't always look good, but it is another option.
  796.  
  797. / Under XFree86 4.0.3, the image under the cursor doesn't appear to be saved
  798.   before the cursor is drawn.  On the next blink, it get screwed up sometimes.
  799.   This also affects selections.
  800.  
  801. / If multiple tags are found with equal sorting values, then sort them by
  802.   the timestamp of the file where the tag is defined.  Do this in ref, in
  803.   addition to the built-in tags searcher.  Use dirtime() to find the
  804.   timestamp... but will that cause problems in ref?
  805.  
  806. / osunix/osblock.c shouldn't trust the access() function, because broken
  807.   links look like nonexistent files to it.  It should instead try calling
  808.   open(..., O_RDWR|O_EXCL).  Also, think about what happens when blkopen()
  809.   fails, because currently it leaves the tty in "raw" mode.
  810.  
  811. / Windows patch from Mauro Persano: Use GetModuleFileName() to get the full
  812.   pathname of the winelvis.exe file, if possible.  This should be more
  813.   reliable than explicitly searching the path (though it will still search
  814.   the path if GetModuleFileName() fails).
  815.  
  816. / Spelling bug: If a word is known to be bad or incomplete, then any words
  817.   that can be derived from it via suffixes will be considered good.  I.e.,
  818.   the suffix test only checks whether the base word is known, not whether it
  819.   is good.
  820.  
  821. / The showspell option doesn't update the status line correctly when running
  822.   in the termcap user interface.  It isn't updated as often as it should be.
  823.   Specifically, it is only changed from empty to suggestions.  (Scrolling
  824.   causes it to be empty, briefly.)
  825.  
  826.     This is exactly the way other status messages work, but other status
  827.     messages aren't sensitive to the cursor position.  The genlastrow()
  828.     function will need to be extended to clear the last row before the
  829.     next update, if it is displaying alternative spellings.
  830.  
  831. / The "gs" command complains about words that start with digits.
  832.  
  833. / Spell checker bombs on words longer than 100 characters.  Any word that
  834.   long should be assumed to be misspelled, and not have any suggested
  835.   alternatives.
  836.  
  837. / With incsearch set, elvis could dump code on some partially-entered
  838.   regular expressions, such as "/[^[".
  839.  
  840. / In expressions, allow $_ to be used as a synonym for line().  Allow $ before
  841.   options, too.  This would make Perl users happy.
  842.  
  843. / Can't yank from a locked buffer?
  844.  
  845. / Change the description of makeprg and ccprg, to include a description of
  846.   how to add double-quotes around $2.
  847.  
  848. / Odd things happen when you edit a filename that looks like a file number.
  849.   E.g., ":e 1".  It can clobber an existing buffer.
  850.  
  851. / d/regexp/+0 retains the line containing regexp, but should delete it.
  852.  
  853. / Spelling gives false errors when sidescrolling is enabled -- partial words
  854.   along the left edge of the screen are flagged as being incorrect.
  855.  
  856. / Speller should skip over words that begin with a digit.
  857.  
  858. / Could incremental searches be smart enough to skip searching if more
  859.   keys are in the type-ahead buffer?  That might avoid some useless search
  860.   time.
  861.  
  862. ? How to dump core: 1) start editing an existing file, 2) run ":make",
  863.      3) run ":("Eel)sp", 4) run ":!ref ...".
  864.  
  865. ? The :configure alias doesn't work when there are spaces in the
  866.   directory names.
  867.  
  868. / Create a script that map's vim's commands to the corresponding elvis commands
  869.   including the following:
  870.     rX    changes each non-newline to X [:map select r g=]
  871.     x    Delete (like d) [:map select x d]
  872.     U    make uppercase [:map select U gU]
  873.     u    make lowercase [:map select u gu]
  874.     ~    toggle case [:map select ~ g~]
  875.     J    Join whole lines (like :join) [:map select :j^M]
  876.     ^]    Tag search, for highlighted text [:map select ^] y:ta ^P^M]
  877.     R    Change whole lines (same as S)
  878.     o    Go to other end
  879.     O    go to other edge of rectangle
  880.  
  881. / Allow v/V/^V to change the type of a pending selection.
  882.  
  883. / When a rectangular selection is pending, $ should cause it to extend all
  884.   the way to the end of each line.
  885.  
  886. / New motions for v/V/^V selections:
  887.     g%    go to other end of selection  (same as vim's o)
  888.     g^V    go to other vertical edge of rectangular selection (vim's O)
  889.  
  890. / :>> doesn't shift twice, but should.
  891.  
  892. / The :join command doesn't work correctly when multiple lines are visually
  893.   selected -- it still joins just the current line & following line.
  894.  
  895. / Wasn't there a window() function?  There should be!
  896.  
  897. / Describe why "-Gx11" is needed when adding elvis to an X start menu in Linux.
  898.  
  899. / ":help ^Wd" doesn't work.  Apparently multi-key vi commands aren't
  900.   recognized by the viname() function.
  901.  
  902. / Speller dumps core if a spell_t node has a max=255.  That's a valid Latin-1
  903.   letter, but it messes up some loops that use a CHAR as a counter, since
  904.   the counter can never be incremented past 255.
  905.  
  906. / Support keyboard timeouts (the usertime option) in the "x11" user interface.
  907.  
  908. / If the "find next misspelled word" command is used with a count, and the
  909.   cursor is on a misspelled word, then use the count'th corrected spelling.
  910.   For example, ^K moves to a misspelled word, and 1^K uses the first
  911.   suggested correction.
  912.  
  913. / Need to support 'g' commands, so we can standardize keystrokes for spelling.
  914.  
  915.     / g0    go to leftmost char in current row (for wrapped lines)
  916.     / g^    go to first non-whitespace char in current row (for wrapped)
  917.     / g$    go to rightmost char in current row (for wrapped lines)
  918.     / gj    move down to same column of next row (next line, or next row
  919.         of a long wrapped line)
  920.     / gk    move up to same column of previous row.
  921.     / gd    go to local definition of word that the cursor's on (first
  922.         mention within the current function).
  923.     / gD    go to global definition of word that the cursor's on (first
  924.         mention in the current file).
  925.     / gI    like "0i"
  926.     / gJ    join lines without space, like ":join!"
  927.     / gU    operator, makes text uppercase
  928.     / gu    operator, makes text lowercase
  929.     / g~    operator, makes text lowercase
  930.     / ga    show ascii code of current char in ascii, decimal, hex, octal
  931.   and...
  932.     / gh    move left, skipping hidden characters (for markup modes)
  933.     / gl    move right, skipping hidden characters (for markup modes)
  934.       / g=X    operator, replaces text characters with X
  935.       / gs    go to next misspelled word.  If given a count, then before
  936.           moving, replace the current word with the count'th alternative
  937.           spelling.
  938.     / gS    go to end of current spelling word. (Useful for cgS, if none
  939.           of the alternative spellings are correct.)
  940.  
  941.   The first task is to create a means by which these commands can be parsed.
  942.   Probably this should be a second table, similar to the vikeys[] array in
  943.   vi.c.  An extra BOOLEAN flag in the vi input state will indicate whether
  944.   the main table should be used, or the g table.
  945.  
  946.   Then I can start implementing the actual G commands.  Some will be easier
  947.   than others, but none should be terribly hard... except gv.
  948.  
  949.   Tests:
  950.   / Make sure invalid g commands are rejected safely.
  951.   / Make sure valid ones are recognized.
  952.   / Make sure ":help gs" works.
  953.   / For operators, make sure "g~g~" and "g~~" both change the whole line.
  954.   / Verify that g=x works for motions, text objects, and selections.
  955.   / Verify that other operators work for motions, text objects, and selections.
  956.   / Make sure changes can be undone.
  957.   / Make sure . can repeat all of the commands that change text.
  958.  
  959. / Elvis hangs on :%s/\( ,\)\+//g
  960.  
  961.     This turned out to be due to a recently introduced bug in non-greedy
  962.     closure operators: They weren't checking the minimum number of
  963.     repetitions.
  964.  
  965. / When incsearch is set, ":map! >^[?<^Mye" dumps core.
  966.  
  967.     For backward incremental searches, the regexp's leavep field wasn't
  968.     being saved.
  969.  
  970. / Elvis hangs when hlsearch is set, for any regular expression which could
  971.   match a zero-length string.
  972.  
  973. / WinElvis doesn't update the screen correctly if it scrolls while part of
  974.   the window is off-screen.
  975.  
  976. / Allow :map to support more flags, in addition to "visual".  Some specific
  977.   words that would be handy are:
  978.  
  979.     command    Map works in command mode
  980.     input    Map works in input mode on a normal buffer
  981.     history    Map works in ex and regexp history buffers
  982.     motion    Map works when a motion is expected after an operator
  983.     select    Map works when a visible selection is pending
  984.     noremap    Don't expand maps in in rhs
  985.  
  986.   :map doesn't imply any of the "Map works..." modes, but if no modes are
  987.   specified then it'll default to "command history motion".  :map! implies
  988.   "input history".  Note that these are compatible with traditional vi,
  989.   and aliases can be used to make :map act like vim's mode-specific mapping
  990.   commands.
  991.  
  992.   To keep the map table clean, there are two ways a new entry can affect
  993.   an existing entry:
  994.    1.If the LHS matches an existing entry and some of the contexts are the
  995.      same, then the existing entry should have those contexts removed.  If
  996.      this means the existing map doesn't have any contexts left, then it
  997.      should be deleted.
  998.    2.If the LHS matches an existing entry, and the RHS also matches, then
  999.      the existing entry's contexts should be merged into the new entry's
  1000.      contexts, and the existing entry should be deleted.
  1001.   The new entry is always added, regardless.
  1002.  
  1003.   Also, make sure that if the rhs starts with the lhs, then that portion
  1004.   is never subjected to remapping.
  1005.  
  1006.   The keywords should be allowed before either the lhs or the rhs.  Elvis
  1007.   has always supported "visual" before the rhs, but putting these before
  1008.   the lhs is more convenient in an alias.  To support this, the :map command
  1009.   can't depend on the ex parser to separate the lhs from the rhs, which seems
  1010.   odd.
  1011.  
  1012.   Abbreviations are similar to maps.  Although the flags used with maps
  1013.   don't really apply to abbreviations, there is a chance that the map changes
  1014.   could break the abbreviation table, so abbreviations should be tested too.
  1015.  
  1016. -------------------------------------------------------------------------------
  1017. Fixed in 2.2c-alpha:
  1018.  
  1019. / The command ":map! X visual J" doesn't work.  ":map! X visual :normal J^M"
  1020.   sort of works, but it looses the whitespace.
  1021.  
  1022.     The first map should work now, but it'll work exactly like the
  1023.     second one -- without any whitespace between them.  I figure
  1024.     that's probably close enough.
  1025.  
  1026. / One user reported that ^V{motion}d deletes text okay, but then pastes it
  1027.   all on one line.
  1028.  
  1029.     This happens when you're near the end of the buffer.  The pasted rows
  1030.     from a rectangle can only be pasted into existing lines.
  1031.  
  1032. / Either the "fold" color or "spell" color isn't being allocated correctly.
  1033.   Elvis mixes them up.
  1034.  
  1035.     The "fold" color was being allocated the first time a fold was
  1036.     displayed -- which could be after some spelling errors have been
  1037.     highlighted via a temporary color, hence the confusion.
  1038.  
  1039. / Should autowrite write files before :make, like vim does?  Yeah, I guess so.
  1040.  
  1041. / Allow text object to work with the V/v/^V commands.  This is important!
  1042.   For example, "Va{d" deletes a block using whole-lines.  There is no other
  1043.   way to do that; "da{" and "%d%" both do character deletions, not line
  1044.   deletions.
  1045.  
  1046. / Modify the behavior of ":set! option=value" so it changes the default value.
  1047.   I.e., store the new value as the default, and ONLY if the options wasn't
  1048.   explicitly set before it should change the actual value.  This should never
  1049.   set the option's OPT_SET flag, but may reset it if the new default is the
  1050.   same as the current actual value.
  1051.  
  1052.     This is about half-done now.  In its present state, there is a
  1053.     bug in the way it decides which options to specify in .elvisrc.
  1054.  
  1055.     Keep the desc->dflt pointer.  Leave it NULL for most options,
  1056.     indicating that they've never been set.  When an option is set
  1057.     via ":set" (no !) then store the old version as desc->dflt.  When
  1058.     set via ":set!", then store the new version as desc->dflt.  There
  1059.     is never any time when we take a snapshot of all options' values
  1060.     and call those the default.
  1061.  
  1062. / In html mode, $ moves to the start of the following line, but looks like
  1063.   the start of the current line.  BOTH ARE WRONG!  It should move to the
  1064.   last character on the current line.
  1065.  
  1066. / In visual mode, typing :<enter> should do nothing.  Currently it prints
  1067.   the line and advances.  (Patch supplied by Derek Peschel.)
  1068.  
  1069. / ":vi +line" ignores the line when there's no filename.
  1070.  
  1071. / Regexp changes:
  1072.   / Add a new "magicchar" option which lists the chars that don't need to
  1073.     be preceded by a backslash in order to be considered metacharacters.
  1074.   / Modify the !\x notation (backslash in an alias parameter) to support
  1075.     the new magicchar option.
  1076.   / Make the regexp error messages use \ only where needed.
  1077.   / Add support for alternation, the \| metacharacter.
  1078.   / Add support for using closure on complex subexpressions.
  1079.   / Add metacharacters for edge of a word: \B for not-an-edge, and either
  1080.     \b or \h for edge.
  1081.   / Add an option to choose the meaning of \b.  And eventually \uXXXX.
  1082.   / Add an option that disables Perl-style $name substitution.
  1083.   / Support $name substitution in replacement text of :s/re/text/ command.
  1084.  
  1085. / There should be a way to handle Perl POD text as formatted text.  Basically
  1086.   this would require everything from =head1 through =cut to be treated as a
  1087.   big comment in the "documentation" font.  It probably isn't worth the effort
  1088.   to do anything special with markups within POD text, since elvis won't be
  1089.   used as the formatter, just the editor.  There should be a line in the
  1090.   elvis.syn file to indicate that the language uses POD, and what starts &
  1091.   ends it -- "documentation =cut", where "=cut" ends it, and anything that
  1092.   starts with "=" starts it.
  1093.  
  1094. / Modify PostScript to automatically detect size of paper.
  1095.  
  1096.     Use "clippath pathbbox" to obtain the drawing boundaries.
  1097.  
  1098. / Link error when config.h contains "#undef FEATURE_TEXTOBJ"
  1099.  
  1100.     This is because it also used "#define FEATURE_HLOBJECT", which
  1101.     requires text objects.  I fixed it by making "elvis.h" define
  1102.     FEATURE_TEXTOBJ whenever FEATURE_HLOBJECT is defined.
  1103.  
  1104. / Allow <Shift-Arrow> to select text, like in most Windows programs.
  1105.   / For WinElvis
  1106.   / For XElvis
  1107.  
  1108. / Need a way to distinguish between variable names and other unclassified
  1109.   text, in a syntax-colored buffer.  Perhaps this is another use of the
  1110.   "initialtoken" option.  Or a "mostly" option, which allows individual
  1111.   languages to be configured to use something other than "variable" for
  1112.   unclassified words.
  1113.  
  1114.   This is more important now, because spell-checking of variables is normally
  1115.   disabled, but in "syntax html" mode all words look like variable names.
  1116.  
  1117. / The "syntax" display mode allows single characters to be declared as
  1118.   keywords (for example, to change their font), but if you do that and also
  1119.   use the character in a "useregexp" list, then the *character* is marked as
  1120.   preceding regexps, but the *keyword* is not.
  1121.  
  1122. / The "showlink" option has the weird side-effect of making the current word
  1123.   be displayed on the status line, while in "man" display mode.  Harmless,
  1124.   but very odd.
  1125.  
  1126. / The :browse and :sbrowse commands are broken -- the links don't work.
  1127.   This also affects the :kwic alias.  Apparently, somehow elvis lost the
  1128.   ability to handle file:...?command URLs.
  1129.  
  1130. / Can't use incsearch as the target of an operator.
  1131.  
  1132.     Maybe disable "incsearch" when searching is used as the target of
  1133.     an operator.  That should be easy to do, and would probably be
  1134.     satisfactory to most users.
  1135.  
  1136. / Incsearch doesn't set "wantcol" -- after a successful search, hitting j or k
  1137.   will cause the cursor to jump to its previous column, instead of staying in
  1138.   the same column.
  1139.  
  1140. / In incsearch mode, the new $name variable interpolation doesn't work.
  1141.  
  1142.     The fix for this will probably involve calling regbuild() function,
  1143.     since that's where $name is implemented.  And if we're going to be
  1144.     calling that, then we might as well support the search flags too.
  1145.  
  1146. / The visual command "/$" moves the cursor to the newline character, instead
  1147.   of the last character in the line.
  1148.  
  1149. / Need a clean way to allow HTML files to be displayed initially in either
  1150.   "syntax" or "html" mode (whichever the user prefers).  Currently, all the
  1151.   user can do is modify elvis.arf to set bufdisplay differently.  This isn't
  1152.   good enough because setting it to "syntax" inhibits the ^Wd command, and
  1153.   may also affect some other commands.
  1154.  
  1155.     Added an "initialsyntax" buffer option, and a global "prefersyntax"
  1156.     option which is used to set "initialsyntax" automatically via the
  1157.     elvis.arf script.
  1158.  
  1159. / Maybe add a "mkexrcfile" option.  String, defaults to "".  If set to some
  1160.   other value, then that's where :mkexrc writes by default, and :mkexrc is
  1161.   allowed to overwrite that file if it exists.  Whenever :mkexrc writes a
  1162.   file anywhere, it first sets mkexrcfile to the file name, so that the same
  1163.   file can be overwritten easily.
  1164.  
  1165.   The :cd command makes this dangerous.
  1166.  
  1167. / In incsearch, ^V can't be used to escape control characters.
  1168.  
  1169. / "hlsearch" and "selection" fonts don't mix well.  The foreground color
  1170.   is lost, at least with the "x11" interface.
  1171.  
  1172. / Change the way "Elvis custom initialization" (for :mkexrc) is updated.
  1173.   Only consider updating it if the event counter has changed, so that complex
  1174.   initialization scripts only update it once.  The :mkexrc command regenerates
  1175.   the buffer before writing, just to be sure it is up to date.
  1176.  
  1177.   Ideally, it should be updated from event.c, near the end of each event
  1178.   handler function.  The ex.c file should simply set a flag indicating that
  1179.   the update is needed.
  1180.  
  1181. / Need an easy way to store regexp text in variables.  Suggest Perl's $name
  1182.   or ${name} notation.
  1183.  
  1184. / In expressions, make ":" operator concatenate path elements, using the
  1185.   OS-specific path delimiter (either ":" or ";").  This shouldn't interfere
  1186.   with its use in the "?:" ternary operator.
  1187.  
  1188. / The :normal command has a bug.  The second invocation causes a core dump,
  1189.   at least when used inside an alias.  This prevents the :spell alias from
  1190.   working.
  1191.  
  1192. / Modify the "x11" gui to support font names of the form "font*size", like
  1193.   the "windows" gui already does.  Rename "normalfont" to "font".
  1194.  
  1195. / The cfmt alias is broken.  It seems to think all comments are C++ comments.
  1196.   Perhaps the error status of :s/// has changed?  I know I fixed the :g//s///
  1197.   behavior recently.
  1198.  
  1199. / Folding interferes with <PgUp>/<PgDn>.
  1200.  
  1201.     This is probably because the dmnormal.move() function doesn't
  1202.     handle folds when the absolute value of the linedelta is > 1.
  1203.  
  1204. / The :help command should allow = at the end of n option name.
  1205.  
  1206. / It would be nice if the "aL" text object ignored preprocessor lines, the
  1207.   same way that it ignores blank lines.
  1208.  
  1209. / In arithmetic expressions, using a regular expression as a function argument
  1210.   sometimes causes core dumps.
  1211.  
  1212. / In incsearch, /<Enter> and ?<Enter> don't repeat the previous search.
  1213.  
  1214. / The "autoselect" option was recently broken.
  1215.  
  1216. / hlobject updates are too optimized.  If multiple windows, it won't always
  1217.   update the highlight range even after the cursor has moved outside of the
  1218.   highlight region.  Setting nooptimize hides this bug.  It seems to go
  1219.   away if there is only one window.  Maybe it is confused about the "current
  1220.   window"?
  1221.  
  1222.   Serious quirks in screen updates while editing, too.
  1223.  
  1224. / Add an error message when a script contains an unterminated {...} block.
  1225.   Also, warn users to enclose the hlobject value in quotes so "a{" doesn't
  1226.   cause the parser to become confused.
  1227.  
  1228. / Does hlobject sometimes cause foreground colors to be lost?
  1229.  
  1230.     Merijn Brand:
  1231.     If hlo/hll is on and the block (on the first level) is rather
  1232.     large, the block is backgrounded with the appropriate color, but
  1233.     the syntax highlighting of the bottom half of the screen
  1234.     disappears. I realize this a weak  which is rather
  1235.     hard to verify, but I've not come up yet with a 
  1236.     example.
  1237.  
  1238.     Here's one way to reproduce it: ":man pcre".
  1239.  
  1240.     This is almost certainly an example of using up all of the colors,
  1241.     so any attempt to merge two fonts returns just one -- the hlobject<N>
  1242.     font.  Why are so many fonts being used, in such simple contexts?
  1243.  
  1244. / <Enter> doesn't advance the cursor.
  1245.  
  1246. / In incsearch, /\ will hang elvis.
  1247.  
  1248. / After an incsearch is cancelled, hide the status info.
  1249.  
  1250. / To support highlighting of whole lines, allow the hlobject value to use
  1251.   a 'V' prefix, as in `:set hlobject="Va{"'
  1252.  
  1253. / Some objects cause core dumps, if the buffer is empty.  This is most critical
  1254.   when you have "set hlobject=a{" in your .exrc file.
  1255.  
  1256. / Shouldn't draw guide lines on ~ rows after last line of file.
  1257.  
  1258. -------------------------------------------------------------------------------
  1259. Fixed in 2.2c-alpha:
  1260.  
  1261. / Still need to implement "boxed" text in "windows" printer.  Also, the screen
  1262.   needs to support COLOR_LEFTBOX and COLOR_RIGHTBOX, plus the "guide" color.
  1263.  
  1264. / :g/re1/ s/re2/text/ stops at the first line which contains re1 but not re2.
  1265.  
  1266. / Syntax descriptions aren't being cached correctly.
  1267.  
  1268. / "/\@" only looks for the first letter (anywhere in the found word), even
  1269.   though ^A still searches for the whole word.
  1270.  
  1271. / Add vim's :normal command.  When invoked without arguments, it can still
  1272.   switch to "normal" mode for backward compatibility.
  1273.  
  1274. / The "syntax" display mode should allow tabs between the function name
  1275.   and the ( character.
  1276.  
  1277. / Here's a weird bug: When running "elvis +make", sometimes the screen
  1278.   is cleared to a funny color during compilation, and then when the cursor
  1279.   has moved to the first error and is responding to keystrokes, it is
  1280.   stuck on the second-to-last line (just above the status line).  This is
  1281.   *not* open mode -- Hitting <z><z> fixes the scrolling.  One big clue: screen
  1282.   updates are very slow, as though it was redrawing the whole buffer from the
  1283.   top each time.
  1284.  
  1285. / ":color selection" can only set attributes, not colors.
  1286.  
  1287. / In the manual, the <title> sections all say "Elvis 2.1".
  1288.  
  1289. / Backspacing while in indentation with autoindent is very quirky.  Apparently
  1290.   it moves the cursor back too far, when the shifting operation doesn't delete
  1291.   as much as it might in some other context.  It only occurs when smarttab is
  1292.   set.
  1293.  
  1294. / The showlink option is slow if there are no <a ...> tags shortly before
  1295.   the cursor position.  It should probably stop looking if it sees a tag
  1296.   which is a paragraph/section marker.
  1297.  
  1298. / Many web pages uses non-Latin1 characters for quote marks and such.  Perhaps
  1299.   ":set nonascii=hack" should translate the illegal characters into legal
  1300.   ones.  It might also be nice if nonascii characters could be flagged with
  1301.   a distinctive font, too.
  1302.     0x85    :
  1303.     0x91    `
  1304.     0x92    '
  1305.     0x93    "
  1306.     0x94    "
  1307.     0x96    -
  1308.     
  1309. / The command "/[[:space]]" (without the second ":") causes a core dump.
  1310.  
  1311. / The "termcap" interface's graphic chars don't work?  Since when?
  1312.  
  1313.     Actually, it works but rxvt doesn't support graphic characters when
  1314.     using the Sony "12x24" font, because that font doesn't have graphic
  1315.     characters in the usual places.  xterm works around that, but rxvt
  1316.     apparently does not.
  1317.  
  1318. / Regular expressions should support \x notation inside character lists
  1319.   (the [] notation).
  1320.  
  1321. / Revise the way the "draw.c" module compares the old screen image to the
  1322.   new one.  Instead of storing the old font code, it should store the old
  1323.   font's attributes: foreground RGB, background RGB, and bits.  The new
  1324.   screen image should continue to store the font code though; we need it
  1325.   to find the color code for the RGB values.  This solves the following
  1326.   problems:
  1327.  
  1328.   o Temporary font codes are recycled after the screen image has been
  1329.     updated, so we don't know what attributes it had.
  1330.  
  1331.   o Some attributes (such as guides and box-ends) are synthesized inside
  1332.     "draw.c", and are not stored in any font code (temporary or permanent).
  1333.     Synthesizing them this way requires code to be scattered throughout
  1334.     "draw.c" instead of collected in reasonable places, and it also limits
  1335.     the efficiency of updates.
  1336.  
  1337.   This requires replacing the di->curfont array or 1-byte codes with a
  1338.   di->curattr array of 8-byte attribute bundles.  It also requires some
  1339.   changes inside draw.c, because the way fonts are stored and compared
  1340.   will be changed.
  1341.  
  1342.   HOWEVER, THIS WILL NOT FIX ANOTHER TEMPORARY FONT PROBLEM: The markup
  1343.   display modes store the font code of the start of each line.  That code
  1344.   could be temporary.  A separate solution should be found for that.
  1345.  
  1346. / Another good idea: Add guide lines -- vertical lines superimposed at
  1347.   certain column numbers, configurable for each window (or for each buffer?).
  1348.   Multiple guide lines should be supported.
  1349.  
  1350.   This should be implemented as a new "guide" option, whose value is a
  1351.   comma-delimited list of widths.  Ideally, the "tabstop" and "shiftwidth"
  1352.   options should be modified to use the same type of values.
  1353.  
  1354. / Modify the way "boxed" text is drawn.  In addition to the basic "boxed"
  1355.   attribute, it should also pass bits indicating whether the top, bottom,
  1356.   left, and right edges should be drawn.
  1357.  
  1358.     This would be more complicated than it sounds.  Characters could
  1359.     be forced to be redrawn even if they haven't changed.  Strings of
  1360.     characters that are all in the same font could be forced to be
  1361.     drawn in different gui->text() calls, because some use the top/bottom
  1362.     edges and some don't.
  1363.  
  1364.     A simpler alternative might be to pass in separate bits for the
  1365.     left & right edges (of the entire chunk of text, not each character),
  1366.     but always draw the top & bottom whenever boxed text is drawn.  This
  1367.     would also give an easy, portable way to draw the guide lines.
  1368.  
  1369. / Extend the :color command to support an "or <colorname>" clause.  If the
  1370.   <colorname> has a higher contrast against the background than the current
  1371.   color, then then use it; else ignore it.  This would allow commands such
  1372.   as ":color prep light green or dark green" -- if the background is light,
  1373.   preprocessor directives would be dark green; if the background is dark,
  1374.   they'll be light green.
  1375.  
  1376.   This *might* not need to store the color that isn't used; the command
  1377.   string would be enough.  The only time this would cause problems would
  1378.   be if the foreground was inherited but the background was specified, and
  1379.   the specified background happened to be close to the foreground.  Elvis
  1380.   couldn't choose the alternate color then, because it would have forgotten
  1381.   what it is.  Perhaps that's a good thing though -- easier to understand.
  1382.  
  1383.   Storing only the chosen foreground and background would also allow more
  1384.   than one alternate foreground to be specified.  For example, on a green
  1385.   background, "light green or dark green or pink" would select pink.
  1386.  
  1387.   This would work best if the background color was always parsed first, so
  1388.   "white or black on white" would always resolve to black on white, even if
  1389.   the inherited background would have been black.  THIS PROBABLY ISN'T
  1390.   IMPORTANT since the "or <colorname>" clause is unnecessary if you're
  1391.   forcing it to use a known background anyway.
  1392.  
  1393.   The :lpr command would always choose colors with the assumption that the
  1394.   background is white.  This is actually trickier than it sounds -- colors
  1395.   are only selected when a :color command is given, not when some other
  1396.   factor causes backgrounds to change.  So :color would need to compute
  1397.   both the video foreground and the lpr background, and store them both.
  1398.  
  1399. / "ref write" hangs.
  1400.  
  1401. / The guimoveto() function calls (*gui->moveto)() even if it is NULL.
  1402.  
  1403. / The readeol option is recalculated by lib/elvis.brf even if the buffer
  1404.   already exists.  That's wrong; it should leave the option unchanged.
  1405.   Also, maybe make -b force binary I/O.  Suggested by Alexandros M Manoussakis
  1406.   <amm2@andrew.cmu.edu>
  1407.  
  1408. / Some changes to :color
  1409.  
  1410.     / Allow "+=" to merge new attributes into old attributes.
  1411.  
  1412.     / Maybe allow "-=" to support removal of attributes.  This is a little
  1413.       tricky for colors and fixed/proportional.
  1414.     
  1415.     / After "+=" or "-=", synthesize a new string which configures all of
  1416.       the set attributes in a single statement.  This is required for :mkexrc
  1417.       to work reliably, and for ":color" to list complete attributes.  Doing
  1418.       this will require foreground & background color names to be stored.
  1419.  
  1420. / "3ofoo^[" will insert 3 foo's, but they'll all be on the same line.  They
  1421.   should each be on a separate line.  (This also affects the . command.)
  1422.  
  1423.     Actually, the standard "o" command doesn't accept a count.  But if
  1424.     elvis' version does, its behavior should be more intuitive that it
  1425.     currently is.
  1426.  
  1427. / When :a or :i has text on the command line (instead of following), it
  1428.   leaves the cursor on the line below the inserted text, instead of on the
  1429.   last line of the inserted text.
  1430.  
  1431. / Create a "showlink" option which displays (on the status line) the value
  1432.   that tagatcursor() returns.  This would be nice in "html" mode but a pain
  1433.   in normal mode, so perhaps it should be a display option.  Either that, or
  1434.   make it sensitive to the same thing that changes the <Enter> key's behavior.
  1435.  
  1436.     This option would be tested in the draw.c module, so making it a
  1437.     display option would be awkward.  Make it global and check for the
  1438.     <Enter> key thing (i.e., check whether display->tagnext is defined).
  1439.  
  1440. -----------------------------------------------------------------------------
  1441. Fixed in 2.2b-alpha:
  1442.  
  1443. / In "man" display mode, any blank lines before a .P or similar command will
  1444.   confuse elvis, preventing you from moving the cursor upward over a paragraph
  1445.   boundary.
  1446.  
  1447. / The :browse and :sbrowse commands need to be tweaked.  They contain a
  1448.   work-around for a minor bug in the "html" display mode, but that bug has
  1449.   now been fixed, so the workaround (an extra space after <pre graphic>)
  1450.   should be removed.
  1451.  
  1452. / Modify lowline() and lowoffset() so that if looking for a line near the end
  1453.   of a block, the newlines are counted from the end of the block instead of
  1454.   the beginning.  That should be faster.
  1455.  
  1456. / Add an "%%Orientation: Landscape" comment to ps2 output after "%%CreationDate"
  1457.  
  1458. / UNC ("\\host\dir\file") names still don't work correctly under Windows.
  1459.  
  1460.     This turned out to be due to a bug in the way elvis was checking
  1461.     Cygwin's mount table.  The bug only affected Cygwin users who had
  1462.     something mounted as "/".  For example, if "C:\" was mounted as "/"
  1463.     then "\\host\dir\file" was being interpreted as "C:\host\dir\file."
  1464.  
  1465. / On terminals with "brain damaged newlines" (the :xn: termcap flag),
  1466.   modifying the last column on a line would have unpredictable results.
  1467.  
  1468. / Add color support to the "html" lptype. <font color="#rrggbb">...</font>
  1469.  
  1470. / Can't print HTML documents via "-c" anymore?  It dumps core.
  1471.  
  1472. / lptype=html produces bad output.  ">" is output as ">" without a ";".
  1473.   Also, since 2.2a-alpha, it has been changing the font for each character,
  1474.   instead of only between fonts.
  1475.  
  1476. / Bug: Can't interrupt elvis with ^C or anything else, with any interface.
  1477.  
  1478. / New features for searches:
  1479.   / 'i' flag for ignorecase, 'c' for noignorecase, 's' for smartcase.
  1480.   / 'w' flag to imply \< \> around regexp.
  1481.   / 'x' flag to imply ^ $ around regexp.
  1482.   / Vim's smartcase.  Regexps that contain any uppercase letters force off
  1483.     the "ignorecase" option temporarily.
  1484.   / Support for \i and \I character classes. \I is any char that can start
  1485.     an identifier, and \i is any character that can appear later in an
  1486.     identifier.
  1487.   / Vim's hlsearch option -- highlight *ALL* matches, without selecting them.
  1488.  
  1489. / From Merijn Brand:
  1490.   Something is broke in syntax highlighting.  Try this on an excerpt from
  1491.   the ColourChooser module [using ":display syntax perl"]: 
  1492.  
  1493.     $colour[1] =~ s/\s+//g ;        # Colourname
  1494.     $colour[2] = lc $colour ;       # colour name
  1495.     $colour[3] = $colour[2] ;
  1496.     $colour[3] =~ s/\b(\w)/\u$1/g ; # Colour Name
  1497.     $colour[4] = $colour[3] ;
  1498.     $colour[4] =~ s/\s+//g ;        # ColourName
  1499.     for my $i ( 5..9 ) {
  1500.         $colour[$i] =~ s/\d+$// ;   # Remove trailing digits
  1501.         } 
  1502.  
  1503.   and see what happens :-( to the first line.
  1504.   now change the s/\s+//g to s/\d+//g. Ooooops! 
  1505.  
  1506. / ":color role1 like roll2 etc" includes all following text in the "roll2"
  1507.   name.  The "roll2" name *SHOULD* be exactly one word long every time.
  1508.  
  1509. / On last line of a file, do "$v^=" to evaluate an expression.  The expression
  1510.   is stored on the last line, but the final newline is missing.
  1511.  
  1512. / Add a :safely command.  It temporarily sets the safer flag (like :safer)
  1513.   while executing the rest of the line as an ex command (like :try or :then).
  1514.   This would be handy if the "ex" protocol was implemented via a :readex
  1515.   alias -- the alias could be smart enough to make "ex" links safe.
  1516.  
  1517. / Add the :push command already!  Like :e, except that it saves previous
  1518.   position on the tag stack.
  1519.  
  1520. / In "windows" GUI, after ":set number" you can't highlight whole lines via
  1521.   the mouse.  (The strip along the left edge of the window goes away?)
  1522.  
  1523. / In "x11", the scrollwheel only works right in the text area.  Other windows
  1524.   treat it like any other mouse click.  All wheel events should be treated
  1525.   as though they occurred in the text area.
  1526.  
  1527.     Fixed... but the statusbar never requests mouse events, so that area
  1528.     is dead to scrollwheel events too.  That's okay.  I mostly wanted
  1529.     to make sure scrollwheel events wouldn't do anything disastrous in
  1530.     the toolbar.
  1531.  
  1532. / Add a new() function, which creates a buffer but not a window, and returns
  1533.   the name of the buffer.  Optional argument is a desired buffer name, else
  1534.   it uses "Elvis untitled %d".
  1535.  
  1536.   This is the first time that functions will have side-effects.  If you want
  1537.   to evaluate an expression without displaying the result, just to get the
  1538.   side-effect, then you could use the :if command without a :then.
  1539.  
  1540. / "make clean" should remove the executables.
  1541.  
  1542. -----------------------------------------------------------------------------
  1543. Fixed in 2.2a-alpha:
  1544.  
  1545. / Font/color changes:
  1546.   / Support the new :color syntax
  1547.   / :color can add other attributes: bold, italic, underlined, boxed, fixed.
  1548.   / This only specifies *CHANGES* to colors or attributes.  Unspecified
  1549.     colors are retained from previous font.  Attributes are ORed.
  1550.   / Limits: 128 font names (so we can have standout versions).
  1551.   / Each font is stored as a struct containing a pointer to its name,
  1552.     fgcolor index, bgcolor index, attribute bitmap.  The name-to-index
  1553.     conversion can be slow -- it is only used when a display mode initializes
  1554.     itself.
  1555.   / When constructing a new screen image, for each character we store a font
  1556.     index, optionally with a bit set to indicate a selection.  This is compact
  1557.     and should be good enough when comparing images.
  1558.   / After an image is generated, it is combined with the "normal" font to
  1559.     inherit from it any colors/attributes which are not explicitly set.
  1560.     elsewhere.  The can also be an "idle" font.
  1561.   / Change all display modes to use new font convention.
  1562.   / Change all GUIs to use new font convention.
  1563.     (Except "vio", for now.)
  1564.   / Change all printer drivers to use new font convention.
  1565.     (Except "windows" is untested.)
  1566.   / Update the manual.
  1567.  
  1568. / In input mode, make ^Z move rightward across any backspaced text, keeping
  1569.   it instead of deleting it.
  1570.  
  1571. / Change the version number to 2.2a-alpha
  1572.  
  1573. / Add smartargs option for displaying a function's arguments.
  1574.  
  1575. / Modify "ref" to look through elvispath.  Put a file of ANSI C stubs into
  1576.   elvis' lib directory and generate a "tags" file from it.  This will allow
  1577.   "ref" to act as a reference for the standard library.
  1578.  
  1579. -----------------------------------------------------------------------------
  1580. Fixed (or not) in version 2.1_4:
  1581.  
  1582. / The built-in calculator's shell() function gives an ugly error message
  1583.   if the safer option is set.  It fails correctly; it simply looks ugly.
  1584.  
  1585. / POSIX says that ^F/^B should leave two lines overlapping, not just one
  1586.  
  1587. / POSIX says that $ should accept a count, and move forward (count-1) lines.
  1588.  
  1589. / Executing ":do source somefile", where somefile contains an inner :while
  1590.   loop, messes up the condition for the outer loop.
  1591.  
  1592. ? The text-mode version of elvis sometimes has problems drawing characters
  1593.   near the left edge of the window.  Apparently it gets confused about where
  1594.   the cursor is located.
  1595.  
  1596.     I've seen this on some occasions, but I not recently.  I've never
  1597.     been able to reproduce it reliably.  Perhaps it was a side-effect
  1598.     of some other bug?
  1599.  
  1600. / Under MS-DOS with TERM=nansi (and NANSI.SYS installed, of course) the screen
  1601.   is shifted up one line.  TERM=ansi works, but doesn't use nansi efficiently.
  1602.  
  1603. / For gui="x11", if a window scrolls while some other window has pointer
  1604.   focus, then the cursor isn't drawn.  This is important when, e.g., you
  1605.   use a dialog to search for text.
  1606.  
  1607. / When the same buffer is shown in two windows, inserting text into one
  1608.   window can cause the other to scroll.  This seems to occur only when
  1609.   the location of the change is above the top line of the other window.
  1610.  
  1611.     Apparently what's happening is this: In a series of blank lines,
  1612.     (i.e., lines which contain only a newline character), after any
  1613.     character is inserted before line n, line n-1 has the same offset
  1614.     than line n used to have, so the window update functions assume
  1615.     that line n-1 is really still line n, so it shows line n-1 at the
  1616.     top of the window instead of line n.
  1617.  
  1618.     Probably the win->di->topline variable, which is currently a long
  1619.     which stores an offset, should be replaced with a MARK.  Since
  1620.     MARKs are updated when a buffer changes, this should fix it.
  1621.  
  1622. * Given a URL such as "../untar.c", referenced from "/pub/elvis/unreleased",
  1623.   elvis 2.1_3 tries to fetch "/pub/elvis/unreleased/../untar.c", but it *MUST*
  1624.   be normalized as "/pub/elvis/untar.c" -- i.e., delete instances of "dir/../".
  1625.   Some web servers depend on this.
  1626.  
  1627. ? In "html" mode, if a single displayed line contains more than one link,
  1628.   elvis always seems to follow the *last* link regardless of which one you
  1629.   click on.  This is bad for some menu bars.
  1630.  
  1631.     Actually, this only seems to occur when multiple images appear
  1632.     on a line, and you want to download one of the images.  For
  1633.     real links, elvis works correctly.
  1634.  
  1635.     I took a stab at fixing this one.  It seems better now.
  1636.  
  1637. ? There appears to be a bug in scanning -- a scanned block is not necessarily
  1638.   being locked for the whole time that it should be, which means that it may
  1639.   be removed from the block cache, in which case NULL may be returned by some
  1640.   of the blkXXXX() functions.  Also, on at least one occasion elvis appeared
  1641.   to be trying to free a block which wasn't allocated.
  1642.  
  1643.     This may have something to do with the FEATURE_LITRE feature, or my
  1644.     recent attempts to make searches run faster by keeping at least one
  1645.     scan context for the current location at all times.
  1646.  
  1647.     The FEATURE_LITRE bug is fixed; hopefully that fixes this too.
  1648.  
  1649. / There are still problems with running external programs under Win32.
  1650.  
  1651. / When viewing an HTML document at a URL such as "http://foo/bar.html?boo/far",
  1652.   containing a link to "zot.html", elvis will resolve that link to be to
  1653.   "http://foo/bar.html?boo/zot.html", but it should be "http://foo/zot.html".
  1654.  
  1655.   Similarly, I suspect that fileext() fails on URLs like that.
  1656.  
  1657. / Hitting ^] on an operator doesn't search for an "operatorXX" tag?  I
  1658.   thought it did.
  1659.  
  1660.     It appears to work now.  I don't know why it didn't work before.
  1661.  
  1662. / The alias.c program (which is compiled as vi.exe, ex.exe, and view.exe)
  1663.   has been reported to cause problems under WindowsNT, and more recently
  1664.   under Windows98 as well.
  1665.  
  1666.     It appears that a Microsoft has introduced a bug into their versions
  1667.     of the "exec" system calls.  I switched to "spawn", which waits a
  1668.     little RAM but seems to work correctly.
  1669.  
  1670. / Under Windows95/98/NT, the "Terminal" font has funny spacing and sometimes
  1671.   characters overlap each other.
  1672.  
  1673.     This is a bug in the font, not in elvis.  Elvis only supports
  1674.     fixed-pitch fonts, and although "Terminal" claims to be fixed-pitch,
  1675.     it is really a variable-pitch font.
  1676.  
  1677. / Control chars in an alias aren't displayed in a printable form by the
  1678.   :alias command.  ":alias clean s/.^H//g" looks like "alias clean s///g".
  1679.  
  1680. / Add VIM's "smarttab" option -- <Tab> keys at the beginning of a line act
  1681.   like ^T, so they indent by the shiftwidth amount using a combination of
  1682.   tabs and spaces.  <Tab> keys elsewhere in a line are real tabs.
  1683.  
  1684. / One user reported that elvis was sensitive to keystrokes during quitting.
  1685.   I suspect that gui->poll was being called while the file was being written
  1686.   (possibly just when written via FTP).  That write should not be quittable.
  1687.  
  1688. ------------------------------------------------------------------------------
  1689. Fixed in 2.1_3
  1690.  
  1691. / One user reported crashes in WinElvis when the "Options->syntax" menu item
  1692.   is activated while in "syntax" display mode.
  1693.  
  1694. / Can't identify tags whose whose contains a new-style comment.  Apparently
  1695.   the tag-selector can't parse \/\/ in an regular expression.
  1696.  
  1697. / Make elvis assume "-Gopen" if termcap can't be used.
  1698.  
  1699. ? The :make command is still slightly weird.  "elvis +make" waits until after
  1700.   a keystroke to display the first error message.
  1701.  
  1702. / Document the ftp://host/~user/resource URL notation.
  1703.  
  1704. / The :mark command should save the column number as well as the line number.
  1705.   (I.e., if no explicit address was given, then use the cursor position instead
  1706.   of the start of the cursor's line.)
  1707.  
  1708. / Add a :cbshow alias which displays cut buffers.  To do this right, elvis
  1709.   will need a text() function for fetching text lines...
  1710.     text()        return the current line of the current buffer
  1711.     text(n)        return line #n of the current buffer
  1712.     text(b,n)    return line #n of buffer (b)
  1713.  
  1714. / ":map ^H visual X" doesn't work when the cursor is at the end of the line.
  1715.   It deletes the last character, but then moves the cursor back two characters
  1716.   instead of just one.
  1717.  
  1718. / Assertion fails at buffer.c:1206 when attempting to write an empty buffer.
  1719.  
  1720. ? dmmarkup.c:1066: htmlinit: Assertion `first == True && col == 0' failed.
  1721.  
  1722. / "Dead keys" don't work in "x11" gui.
  1723.  
  1724. / If the .elvisrc file contains "set wrapmargin=0" then that option is
  1725.   displayed by a later ":set" command.  It shouldn't be.
  1726.  
  1727.     This is a complication arising from the fact that wrapmargin is
  1728.     actually implemented via the textwidth option.  Wrapmargin doesn't
  1729.     exist until a buffer is shown in a window, but defaults are normally
  1730.     recorded before that.
  1731.  
  1732. / If there is no tags file in the current directory and inputtab=tagname
  1733.   then there is a long delay each time <Tab> is hit.
  1734.  
  1735. / Is this a good time to fix the bug where :make outputs the first error
  1736.   message *before* prompting the user to hit <Enter>, when it should be after?
  1737.  
  1738. / Add a "howto" describing Perl's error messages.
  1739.  
  1740. / The "noanyerror" option shouldn't prevent the cursor from moving into locked
  1741.   files in the current directory -- only unwritables in some other directory.
  1742.  
  1743. / It's back: Sometimes in "man" mode the cursor can't move up.  This appears
  1744.   to happen only for .IP or .TP commands with long labels.  I should probably
  1745.   change that code anyway, so the labels are considered to be separate lines
  1746.   in that situation.
  1747.  
  1748. / It would be nice if FTP URLs supported user names as in ftp:host/~user/...
  1749.   in addition to just ftp:host/~/...  When a user name is specified, the
  1750.   ~/.netrc file is searched for an account at that host which has that login
  1751.   name; the password is then taken from that entry.
  1752.  
  1753. ? More importantly, it has been reported that the Windows versions don't
  1754.   read "elvis.ftp" correctly.  (It works under Unix; I've tested it.)
  1755.  
  1756.     This appears to work under Win32, as far as I can tell.  Perhaps
  1757.     the user who reported it didn't have "elvis.ftp" in a directory
  1758.     where elvis could find it?  Or maybe the other changes I made to
  1759.     that file (to support ~user) had the side-effect of fixing this?
  1760.     
  1761. / Add support for backticks in filenames -- the text between backticks is
  1762.   interpreted as a shell command, and the command's first line of output
  1763.   is substituted into the line.
  1764.  
  1765.     The main reason for supporting backticks is to do things like
  1766.     ":n `grep -l sometext *.c`".  The backtick expression would return
  1767.     multiple file names.  Because of this, it must be done at a fairly
  1768.     high level in the ex command-line parser.
  1769.  
  1770.     It would also be handy to have a "shell" function which runs a
  1771.     command string and returns its output.  That function would be
  1772.     handy when implementing backtick support, and could also be used
  1773.     for things like...
  1774.  
  1775.         :let d=shell("date")
  1776.  
  1777. / Under Win32, can't always redirect an external program's stdin.  For example,
  1778.   ":%!\windows\command\sort" fails, but ":%!\usr\bin\sort" works.
  1779.  
  1780.     This is ridiculously difficult.  I/O redirection depends on whether
  1781.     the program being run is 16-bit or 32-bit, whether you're running
  1782.     it from WinElvis or elvis, whether you're running Win95/98 or
  1783.     WinNT, and... something else that I haven't figured out yet.
  1784.     I give up.  Instead of trying to do it the efficient way (with
  1785.     pipes when possible, and always using Win32 stdio redirection
  1786.     facilities), I decided to rewrite it from scratch to do it the
  1787.     brain-dead way: By constructing a shell script, and invoking
  1788.     COMMAND.COM to run that script.  This sucks, but it appears to
  1789.     work reliably.
  1790.  
  1791. ? On some systems, elvis sometimes reports "# is illegal during initialization"
  1792.   and then it skips some initialization steps for the first file.  Later files
  1793.   will be initialized correctly; it only affects the first file.  This has been
  1794.   reported under SCO and (I think) Irix.  Unfortunately, it seems to interfere
  1795.   with the "-VVV" verbose feedback.
  1796.  
  1797.     I've improved error messages -- they now include the filename and
  1798.     line number where the problem was detected.  Hopefully that'll allow
  1799.     me to get a little more feedback.
  1800.  
  1801.     I just tried the newest code under SCO, and this didn't happen.
  1802.     It worked fine.  This is definitely a change in its behavior, and
  1803.     that's good... but I wish I knew why it started, and why it may
  1804.     have stopped.
  1805.  
  1806. / Add a "digraph" topic to the howto file, and improve the documentation of
  1807.   digraphs in the main manual.
  1808.  
  1809. / Lose the "tagprgonce" option; the :local command offers a cleaner solution.
  1810.   You can just say "local tagprg=..." in the alias, and be done with it.
  1811.  
  1812. / The [[ and ]] commands shouldn't be line-mode moves.  I.e., from the middle
  1813.   of a line, d]] should not delete the entire current line.
  1814.  
  1815. / When a character-mode deletion ends at a newline, that newline should not
  1816.   be deleted.  The same goes for yanking.
  1817.  
  1818. ? The tagprg option (or something similar) should be used when reading tags
  1819.   for tag name completion.  Apparently it isn't.
  1820.  
  1821.     Actually I think it is, but maybe not quite correctly.  The code
  1822.     assumes the typed part of the tag name is always going to match the
  1823.     initial part of each match.  If the tagprg program doesn't do that,
  1824.     then name completion gets confused.  Changing this behavior will be
  1825.     hard.
  1826.  
  1827. / In a shell command, file name completion should match binary files.
  1828.  
  1829. / After a repeated insert such as 25i*<Esc>, typing <.> will only repeat 24
  1830.   insertions, not 25.
  1831. ------------------------------------------------------------------------------
  1832. ELvis 2.1, official released version
  1833.  
  1834. / Some HTTP sites require a "Host:" line in the GET request.  The argument
  1835.   to "Host:" is the site name and port of the URL elvis is trying to download.
  1836.  
  1837. / Check for licensing wordage in manual or README file.
  1838.  
  1839. / In the "configure" script, xinc is set to /usr/include/X11, when it should
  1840.   be set to /usr/include.
  1841.  
  1842. ? Under WinNT 4.0sp3, the "vi.exe" and "ex.exe" commands have been reported
  1843.   to cause problems.  Input doesn't work right, and the whole DOS window
  1844.   goes away when elvis exits.
  1845.  
  1846. / In macros, !(.)% should work but doesn't.
  1847.  
  1848. ? Elvis has been reported to run out of memory when reading a large LaTeX
  1849.   file -- "http://www.loria.fr/services/tex/general/latex2e.html", although
  1850.   it isn't clear whether elvis is reading it via the net, or from a local
  1851.   file.
  1852.  
  1853.     It worked for me.  The user didn't report what OS he's using.
  1854.     I suspect he's running the DOS version, in which case it isn't
  1855.     surprising that he's running out of memory (even with Win32 on
  1856.     a 64meg Pentium).
  1857.  
  1858. / Change the default configuration to load lib/exalias.eg if there is no
  1859.   custom version in the user's home directory.  Maybe rename it to
  1860.   "elvis.ali" or something like that.
  1861.  
  1862. / Add an "lpheader" option, and modify dmnormal.c:header() to use it instead
  1863.   of the "lplines" option.
  1864.  
  1865. / :s/re/cmd/x sets the cursor to the wrong line -- cmd should run on the line
  1866.   where re was found, but it is incorrectly running on the following line.
  1867.  
  1868. / With textwidth set, if the first line of a file contains no whitespace
  1869.   and extends past the textwidth column, elvis dumps core.
  1870.  
  1871. / Aliases tend to step on each other's use of options.  Many macros temporarily
  1872.   set report=0 to avoid chatter while the alias runs.  To restore it, they save
  1873.   the old value in the "r" option, and copy it back afterward.  If if one alias
  1874.   calls another and they both do "let r=report", then the original value of
  1875.   "report" is lost.  This is one specific example of a larger problem: aliases
  1876.   need local options.
  1877.  
  1878.     I've added a ":local" command.  It is like ":set", except that it
  1879.     saves the old values of any options on a stack, so they can be
  1880.     automatically restored when the alias exits.  Also, ":local" never
  1881.     outputs any options; this allows you to mark an option as being local
  1882.     without immediately changing its value.
  1883.  
  1884. / Both "x11" and "windows" have an option named "toolbar".  It behaves the
  1885.   same on both.  Soon they'll both have "statusbar".  They already had
  1886.   "scrollbar" but I changed the name of the X version since they behaved
  1887.   differently.  I should try to unify this somehow -- both in the program
  1888.   and in the manual.
  1889.  
  1890. / The ":gui ~Label" notation for deleting a button doesn't work, but the
  1891.   postfix ":gui Label~" version does.
  1892.  
  1893. / It would be nice if "gui <label>" would output all info about the given
  1894.   button, under X11.
  1895.  
  1896. / The "tex" mode needs some work, especially for \xxx{text} notation.
  1897.   Several common fonts are not supported, including \code{text}.
  1898.  
  1899. / Aliases can't run during initialization?  Remove that restriction.
  1900.  
  1901. / For gui="x11", cutting & pasting (between applications) large amounts
  1902.   of text doesn't seem to work.  The text gets jumbled up.
  1903.  
  1904. / Write a "howto" file, and an alias to access it.
  1905.  
  1906. / In an empty buffer, search commands seem to get stuck in an infinite loop.
  1907.  
  1908. / The "inputtab=identifier" code should avoid looking up matches when the
  1909.   word is a keyword.  When I type "int<Tab>i;", I don't want to get
  1910.   "intlmsgi;"
  1911.  
  1912. / Add support for cygwin (GNU utilities and API under Windows).  The only
  1913.   unusual things are 1) it needs the local inet_aton() function even though
  1914.   that function is declared in a header, and 2) It doesn't seem to open files
  1915.   in binary mode.  It should, both for session files and for (non-binary)
  1916.   text I/O.
  1917.  
  1918. / On some Linux systems, the variable name "restrict" in tagelvis.c seems to
  1919.   clash with a header symbol.  Changing it to "rest" avoids that.
  1920.  
  1921. / Core dump from io.c:564 when bufdefault is NULL.
  1922.  
  1923. / When abbreviations are expanded via the <Tab> key, elvis inserts a newline
  1924.   after the expanded form, instead of the tab.
  1925.  
  1926. / Apparently ":try s/foo/bar/" doesn't turn off the the "then" flag when the
  1927.   substitution fails.
  1928.  
  1929. / Some QNX problems:
  1930.   / <sys/select.h> isn't included by every file that needs it.
  1931.   / ftpperms is defined in two places.  (Lacks "extern" in header file.)
  1932.   / inst*.sh files don't return a good exit code, which interferes with 
  1933.     "make".  Add "exit 0" to the end of each script.
  1934.  
  1935. --------------------------------------------------------------------------
  1936. Fixed in 2.1j-beta....
  1937.  
  1938. / File name completion doesn't always work on directory names, when the
  1939.   completebinary option is off.
  1940.  
  1941. / It would be nice if, when listing multiple matches, filename completion
  1942.   would leave off the directory path.  That way more matches would fit on
  1943.   a single line.
  1944.  
  1945. / It would be nice if <Tab> completed tag names when editing normal source
  1946.   code.  That would save you a lot of typing if you like long identifiers.
  1947.  
  1948. / On HP, "configure --with-gcc" isn't honored -- it still uses "cc -Ae".
  1949.   Also, HP (and probably some other platforms) expect main() to return
  1950.   an int, not void.
  1951.  
  1952. / If "elvis.arf" executes a :s///x command, then the window doesn't realize
  1953.   that the buffer has changed so it doesn't set the display mode accordingly.
  1954.   This shows up when you're editing non-HTML text, and do "e url" where
  1955.   "url" is a URL or file which doesn't end with ".html", but which does
  1956.   contain HTML text -- the buffer's bufdisplay option gets set correctly,
  1957.   but the window isn't switched to html mode.
  1958.  
  1959. / The "alias.c" file can be compiled for Win32 and OS/2, which may be
  1960.   handy for some people.  To eliminate warnings, it needs <stdlib.h>
  1961.   and <process.h>.  Also, there's a "pid" variable which isn't used.
  1962.   Some shells don't pass the program name in argv[0] so we need to
  1963.   handle that -- probably compile it with a -Dxxx to make it default
  1964.   to "ex", "vi", or "view".
  1965.  
  1966. / File name completion should be case-insensitive on non-Unix systems.
  1967.  
  1968. / The command "elvis -i" (with no file name) creates a buffer which
  1969.   doesn't contain any text.
  1970.  
  1971. / From some URLs, a reference to a full pathname generates an error message
  1972.   about an "unknown site" or something like that.  For example, from
  1973.   http://www.fh-wedel.de, try following the "English pages" link.
  1974.  
  1975. / After ":se report=1", hitting x says "1 line yanked".  Need to make
  1976.   reporting sensitive to the partiallastline option.
  1977.  
  1978. / Make elvis.arf strip off the perl version number from #!/usr/bin/perl-XXXX
  1979.   lines.  This makes syntax easier to recognize.
  1980. -------------
  1981. * If xcurses exists, it should probably be used in preference to curses.
  1982.   (This would be a change to the "configure" script.)
  1983.  
  1984. ? Elvis gets confused if you load a URL which has no filename component,
  1985.   such as "http://www.yahoo.com".  Adding a trailing slash avoids that.
  1986.  
  1987. / Document the meaning of "!" for each ex command.
  1988.  
  1989. / If a :tag fails because the current file has been modified, then that tag
  1990.   is still deleted from the list so ":w|tag" doesn't work.
  1991.  
  1992. / Add ~/.exalias to the distribution.  Maybe extend it with a few other
  1993.   useful aliases such as "courier", "copying", "rm".
  1994.  
  1995. / When an href in a remote web page contains just a file name elvis tends
  1996.   to mangle it.  From ftp://ftp.cs.pdx.edu/pub/elvis/unreleased/README.html,
  1997.   <A HREF="/pub/elvis/untar.c"> is treated (under Unix anyway) as a reference
  1998.   to ftp://ftp.cs.pdx.edu//ub/elvis/unreleased/pub/elvis/untar.c
  1999.  
  2000. / Got stuck in an infinite loop when doing =} at the end of the buffer.
  2001.   There was no blank line at the end of the buffer.  The bug seems to
  2002.   occur after the buffer has been changed, when elvis is trying to update
  2003.   the screen.
  2004.  
  2005.     This appears to be a reliable way to duplicate the same big
  2006.     session file bug I've been tracking for months!  At last!
  2007.  
  2008.     It goes away when LINECACHE is #defined to be 0.  Apparently
  2009.     the caching in lowoffset() is broken.
  2010.  
  2011. / Can't search for 0x00 bytes.  /^X00^M doesn't work.
  2012.  
  2013.     Added \0 for matching NUL bytes.
  2014.  
  2015. / Trouble with the :& and :~ commands:
  2016.    / They are supposed to discard any flags from the original :s command,
  2017.      and accept new flags.  (This implies that the visual ~ command also
  2018.      discards the old flags.)
  2019.    / :& should always use the regexp from the previous :s command, but
  2020.      :~ should use the most recent regexp used in any context.
  2021.    / :s with no args should act like :&
  2022.    / Also, the count isn't supposed to be an instance specifier, it is
  2023.      supposed to be the quantity of lines to scan.  (The current instance
  2024.      specifier is handy, though, so invent a new notation for it -- perhaps
  2025.      a number after a '.' could be an instance.)
  2026.    / Add 'c' flag.  This will require the creation of a new edit mode which
  2027.      searches forward for next match within a range of lines, moves the
  2028.      cursor there, highlights it, and waits for a keystroke.  <Esc> exits
  2029.      that mode; <y> replaces and moves on, anything else moves on without
  2030.      replacing.
  2031.    / The print flags don't work.
  2032.    / global subst for a zero-length regexp doensn't work.
  2033.    / If a match is found at the start of the first line for a :s///c command,
  2034.      the cursor is displayed in the wrong location.
  2035.    / "confirm" doesn't work right in ex mode -- only in vi mode.
  2036.     Modify it to use the same state-insertion technique as visual-mode,
  2037.     and also make it exit ex mode.  The subst structure should be
  2038.     extended to have a flag which indicates whether it should revert
  2039.     ex mode when the last substitution is complete.  To revert, it
  2040.     should replace the "confirm" state with either the old "ex" state
  2041.     or a new one.
  2042.    / check for memory leaks
  2043.  
  2044. / Add an alias() function, which tests for the existence of an alias with a
  2045.   given name.  Modify the default elvis.[ab][rw]f files to check for an alias
  2046.   and use that if it exists.  This will make customization easier.
  2047.  
  2048. / When using <a name=...>...</a> to define a name anchor, elvis shouldn't
  2049.   display the anchor's text like an href link.
  2050.  
  2051. / In "man" mode, blank lines should not affect indentation.  I.e., they
  2052.   should be interpreted  as ".sp", not ".LP".  Exception: If the blank
  2053.   lines are followed by any "." command which causes a line break, then
  2054.   ignore the blank lines.
  2055.  
  2056.   Also, for readonly files it should allow any number of args to a .BI
  2057.   command (or similar commands).
  2058.  
  2059. / In "tex" mode, } should restore the current font to the stored font
  2060.   (which it does in 2.1i) and then set the stored font to "normal" (which
  2061.   is new).  This will help it handle embedded {...} pairs better.
  2062.  
  2063. / The autowrite option is too eager.  After :e thisfile, :sp, :e otherfile,
  2064.   elvis writes thisfile even though it is still visible in the first window.
  2065.  
  2066. / Add the PERL "Artistic License" to the distribution.  Earlier I'd
  2067.   announced plans to distribute elvis under both the old agreement and
  2068.   the GPL, but the Artistic License does pretty much what I wanted.
  2069.  
  2070. / In macros and aliases, the current buffer and the current line within
  2071.   the buffer are not changing as one would expect.  This makes macros
  2072.   much harder to write than they should be.
  2073.  
  2074. / ":let x=TERM" causes a core dump.
  2075.  
  2076. / With Sun + fvwm + -Gx11 + ":set warpback", the pointer is warped back to
  2077.   the xterm's scrollbar when you exit.  This is unfortunate because Sun's
  2078.   xterm's scrollbar eats keystrokes.  The pointer should be warped back
  2079.   to the middle of the top edge of the window.
  2080.  
  2081. / Add an example of command-line editing to the manual.
  2082.  
  2083. / Under DOS and Win32, the ctags program doesn't work.  It doesn't seem to
  2084.   accept lowercase letters at the start of a word.
  2085.  
  2086. / There's a problem with file name completion.  When nocompletebinary,
  2087.   if the only match is a binary file then it backspaces over the file name.
  2088.  
  2089. / Problem with "ref" program -- it doesn't seem to handle "file:" correctly.
  2090.  
  2091. / In "tex" mode, a % on a line by itself causes the following line to be
  2092.   ignored.  It shouldn't!  Also, \' should be displayed as \', not just '.
  2093.  
  2094. / Option value completion: If while entering an ex command, the user
  2095.   types something like ":se kp=<TAB>" then elvis should insert the
  2096.   current value of the "kp" option.  The user can then edit it.
  2097.  
  2098. / For Option value completion, need to insert a backslash before each
  2099.   '|' character, because '|' normally marks the end of the command.
  2100.   NOTE: Check whether this is done for :mkexrc -- it should be!
  2101.  
  2102. ? The "windows" GUI needs to insert backslashes before '(', ')', and '$'.
  2103.   Look for addquotes() in guiwin32/gw{cmd,msg}.c
  2104.  
  2105. / Bug in :calc (filename " " (333 * 100 / 400)) >> 58
  2106.  
  2107.     This appears to be due to a quirk of the concatenation notation.
  2108.     Since there is no explicit concatenation operator, it's difficult
  2109.     to assign it a precedence level.
  2110.  
  2111. / Maybe support name completion for tags?
  2112.  
  2113. / If "showtag" is set, and the tags file is out of date, then you get a
  2114.   bunch of "no match" messages for the tags that it can't find.
  2115.  
  2116. / On an empty buffer, it still says "partial last line".  That flag shouldn't
  2117.   be set for new, empty buffers.
  2118.  
  2119. / Need to be able to create new files on FTP sites.  (And if you can do
  2120.   that, then update the manual too.)  It would also be nice to have a
  2121.   better way to detect directories.
  2122.  
  2123.     I have been unable to find any FTP protocol commands for testing
  2124.     the attributes/existence of a file.  So I'll need to abuse other
  2125.     commands and make some guesses.
  2126.  
  2127.     To test whether a name is a directory, I can try to "cd" into it.
  2128.     Elvis always uses full pathnames for FTP access, so the current
  2129.     directory doesn't matter.  But if I can "cd" into it then it must
  2130.     be a directory; else it either doesn't exist, or is unreadable, or
  2131.     is something other than a directory -- hopefully a normal file.
  2132.  
  2133.     To test for the existence of a file, I should probably try to read
  2134.     it; if the read process starts okay, then I can abort it and know
  2135.     that the file exists; otherwise it is unreadable, not a file, or
  2136.     doesn't exist... and in all of those situations I should assume it
  2137.     is a new file.
  2138.  
  2139.     If I know it exists and is a file, then I can test for writability
  2140.     by attempting to append to it.  If the APND command can be started
  2141.     correctly, then shut it down without actually appending anything and
  2142.     make note that the file is writable; else it is read-only.
  2143.  
  2144. / In replacement text, \^M should be a literal carriage return character,
  2145.   not a newline.
  2146.  
  2147. / In the "man" display mode, 2 or more consecutive newlines (i.e., one or
  2148.   more blank lines) should act like a ".PP" command.
  2149.  
  2150. / In the "man" display mode, add .TS and .TE -- like .nf and .fi, except
  2151.   that .TS has the added quirk of hiding the following line.  This will
  2152.   allow elvis to display tables, sort of.
  2153.  
  2154. / The buffers created when reading a directory, browsing, etc., should be
  2155.   marked as "readonly".  Without this, it is too easy to get a "Hit ^Wd
  2156.   to see source" message.
  2157.  
  2158. / Should :@@ execute the anonymous buffer?  Elvis has trouble parsing it,
  2159.   and after that it executes the same buffer as was most recently used.
  2160.  
  2161. / It should be possible to edit cut buffers, particularly so you can edit
  2162.   @ macros.  To do this, I'll need to make sure a cut buffer doesn't get
  2163.   yanked into itself.  It would also be nice if the line/char/rect status
  2164.   wasn't embedded in the buffer's text (make a new "putstyle" option).
  2165.  
  2166. / Problems in untar.c?  Reported to fail on some archives.
  2167.  
  2168.     Walter Briscoe figured this one out for me.  I was altering
  2169.     a block in the sliding window, when that block was interpretted
  2170.     as a tar header.
  2171.  
  2172. / A little bit of name caching would be a big help for network name lookup.
  2173.  
  2174. / Filename completion really needs work.
  2175.   / At the very least, it should exclude '<' and '>' from the list of
  2176.     characters that can appear in a file name.
  2177.   / It shouldn't be *too* hard to make a parser which guesses whether
  2178.     filename completion makes sense in the current context.
  2179.   / It might be a good idea to make filename completion be disablable via
  2180.     #undef FEATURE_FILENAME.
  2181.   / Another nice addition would be to make it ignore binary files.
  2182.  
  2183. ? :make can't parse AIX error messages, which look like this...
  2184.     "cfunc.c", line 511.38: 1506-045 (S) Undeclared identifier incase.
  2185.   I suspect the ".38" column number is tripping it up.  It would also be
  2186.   nice to ignore the "1506-045 (S)" garbage.
  2187.  
  2188.     That's almost certainly the right diagnosis.  When elvis divides an
  2189.     error message into words, it permits '.' characters in those words.
  2190.     But it didn't allow '.' in a number, so "511.38" was perceived as
  2191.     garbage.  I changed the allowable number format to permit '.'.
  2192.  
  2193. / The autoselect option is broken.  If set in .exrc, then it is reset the
  2194.   first time you give a search command.
  2195.  
  2196.     This is an unexpected consequence of changing the definition of
  2197.     "explicitly set options".  To fix it, I'll need to add a static
  2198.     variable in search.c, and set the variable to True if 'v', to False
  2199.     if 'n', and to the value of autoselect if neither 'v' nor 'n' is
  2200.     given.  Then use that variable in place of the autoselect option,
  2201.     when a search successfully finds a match.
  2202.  
  2203. ? Problem with .exrc scripts (and other scripts too) -- :map lines frequently
  2204.   end with a ^M character.  Since this ^M appears immediately before the LF
  2205.   that marks the end of the line, it looks like a CR-LF pair and so the file
  2206.   may be seen as a DOS text file.  When interpretted on a DOS/Windows platform,
  2207.   the ^M will be deleted.  It also messes up editing of the script on any
  2208.   platform.
  2209.  
  2210.     I changed the way the fileeol() function recognizes file types.
  2211.     If the first 100 bytes of the file contains at least one instance
  2212.     of a LF which isn't preceded by a CR, then the file is assumed to
  2213.     be a Unix text file.  This should allow Unix .exrc scripts to be
  2214.     edited on a DOS/Windows system.
  2215.  
  2216.     To actually execute them, they should be converted to DOS/Windows
  2217.     format.  That way, when a map command ends with ^M, the line that
  2218.     it's on will end with CR CR LF, which will be handled properly by
  2219.     elvis.
  2220.  
  2221. / Options aren't locked by "safer".  Some should be, including "safer"
  2222.   itself.  How long has this security hole been there?
  2223.  
  2224. / Really need a way to queue up messages.  Add :message, :warning, :error.
  2225.  
  2226. ? When GCC is used under HP, don't use the "-Ae" flag.  The normal "cc"
  2227.   compiler doesn't work under HP.
  2228.  
  2229.     I suspect this was due to some new-style function declarations
  2230.     that were in 2.1i.  These have been fixed, so HP's "cc" should work
  2231.     now.  "cc" is preferable to GCC on HPs because "cc" supports shared
  2232.     libraries.
  2233.  
  2234. * Two ^Cs in sequence can kill elvis.  (OS-dependent)
  2235.  
  2236. * When in "html" mode, maybe also make the <Space> key page forward, and the
  2237.   <Backspace> key pop.
  2238.  
  2239. * Can't run a shell command in the background under X11, because elvis waits
  2240.   for an EOF condition on its stdout/stderr.  Should something be done about
  2241.   that?  (You can do it if you redirect the program's stdout and stderr.)
  2242.  
  2243.     Maybe make the x11 prgopen() wrapper check for a '&' command, and
  2244.     force "willread" to False in that situation.  But then prgread()
  2245.     would need to be smarter, or something.
  2246.  
  2247. * After <Shift-K>, the window's wantcol value is messed up -- if you type
  2248.   <Shift-K><j>, the cursor will move to the first character on the following
  2249.   line, instead of staying in the same column.  (This may affect all external
  2250.   commands -- test it!)
  2251.  
  2252.     This only affects <Shift-K>, and even then only in some situations.
  2253.     The column that it moves to varies.  I wasted a whole day trying
  2254.     to figure this one out, with little success.  It seems to have
  2255.     something to do with the copies of wantcol that are stored in
  2256.     the state stack.
  2257.  
  2258. * ":set global?" scrolls off the top of the screen.  Something should be done
  2259.   about that.
  2260.  
  2261.     The fix will probably have to wait until "shell windows" are
  2262.     supported.  They'll allow you to scroll back through the output,
  2263.     like an xterm window.
  2264.  
  2265. * Under MS-DOS, "-o file" can cause a NULL dereference.  File permissions?
  2266.  
  2267.     Or memory limitations?  I looked through the code and it appears to
  2268.     be correct.  It is simple enough that it I don't think there could
  2269.     be any subtle bugs in it.
  2270.  
  2271. * Big clues on why sometimes session files can't be recovered:
  2272.  
  2273.     > This may be interesting. I will pursue it if given instructions.
  2274.     >  
  2275.     > I got a GPF on a telnet session in which I was running elvis.
  2276.     > `elvis -r` got "blkread failed". The read failed with errno set to
  2277.     > 22 which is a singularly unhelpful EINVAL.
  2278.  
  2279.     Probably the EINVAL was left over from some earlier system call, so we
  2280.     can ignore it.
  2281.  
  2282.     blkread() failed because it was asked to read a non-existent block
  2283.     number.  Block 29474 would be at offset 60362752, but the session
  2284.     file you're recovering is only 344064 bytes long.  So the read() in
  2285.     blkread() returned 0 bytes, which would not affect errno.
  2286.  
  2287.     > I infer there is a window of time during which a session file is
  2288.     > not clean.  I don't understand the details of this and don't feel
  2289.     > like deducing them.  What do you want to be done?
  2290.  
  2291.     Apparently elvis needs to inspect the session's low-level buffers more
  2292.     carefully before restoring them.  In your session file, there is a
  2293.     low-level buffer (at block 52) which contains a reference to a bogus
  2294.     block number, and that's preventing you from restarting elvis to
  2295.     recover the other buffers in that session file.
  2296.  
  2297.     As I recall, the most common source of bogus block numbers was when
  2298.     a blklist block was reused as some other type of block.  I suspect
  2299.     that in your session file, the buffer at block 52 was freed, along
  2300.     with its blklist blocks, but the superblock was never flushed after
  2301.     that.  And the blklist block was recycled as a chars block for
  2302.     some other buffer, and that *was* flushed.  (Block numbers are
  2303.     two bytes long, and 29474's bytes are '"' and 's').
  2304.  
  2305.     So probably in addition to making recovery stricter (so it can ignore
  2306.     bad buffers), elvis should also probably flush the superblock
  2307.     immediately after freeing a buffer so that this particular type of
  2308.     bad buffer can't occur.
  2309.  
  2310.     (Yes, I am going to save a copy of this response for myself.)
  2311.  
  2312. / :mkexrc doesn't insert enough ^Vs in front of Esc characters.
  2313.  
  2314. / Under X11, trouble with "-fn -sony...." argument.  I think the "-f logfile"
  2315.   option is causing problems.
  2316.  
  2317.     Changed to "-o logfile".  Sadly, "-o" *MUST* be handled before
  2318.     the GUI initializes itself, so that we can log problems that
  2319.     occur then.
  2320.  
  2321. / With no address := should report the total number of lines.
  2322.  
  2323. / In replacement text, \U and \L should affect literal text as well as
  2324.   & and \1 ... \9.
  2325.  
  2326. ? :N, :previous, and :rewind don't work at the end of the args list.
  2327.   Apparently they check the wrong end of the args list.
  2328.  
  2329.       Unable to reproduce this one.
  2330.  
  2331. / In "untar.c", the typedefs are apparently clashing with similar typedefs in
  2332.   <stdio.h>, on some systems.  Change the names of those types in untar.c.
  2333.  
  2334. / Check the manual for typos!
  2335.  
  2336. / Need to add NEED_MEMMOVE, and use it for older SunOS.
  2337.  
  2338. / The "man" display mode doesn't handle long section names.  At the very least
  2339.   it should truncate them!
  2340.  
  2341. / To compile elvis under Solaris2 with "cc" (not "gcc"), you need to add
  2342.   "-Dconst=" to the value of the CC macro in Makefile.
  2343.  
  2344. / In WinElvis, the "windows" lptype is counter-intuitive.  It changes the
  2345.   lplines and lpcolumn options to correspond to the font size and paper size.
  2346.   This is the opposite from the "ps" and "ps2" lptypes, which change the
  2347.   font size to squeeze lplines by lpcolumns characters on a page.
  2348.  
  2349. / The sesclose() function shouldn't attempt I/O on the session file unless
  2350.   the session file has been successfully opened.  Currently, elvis can get
  2351.   stuck in an endless loop giving fatal error messages if you set SESSIONPATH
  2352.   to a bad value.
  2353.  
  2354. / Sometimes crashes after running multiple external commands.  Particularly
  2355.   noticible with :make, but I think it affects all external programs.
  2356.   Reported under Linux.
  2357.  
  2358.     I used to be able to reproduce this easily, but now I can't.  Either
  2359.     some other change fixed this or changed its symptoms, or I just forgot
  2360.     how to reproduce it.
  2361.  
  2362. / A core dump has been reported while entering a ":x" command.  The dump
  2363.   apparently occurred inside the mapdo() function after most of the local
  2364.   variables got scrambled.
  2365.  
  2366.     This may be a variation of the "crash after running an external
  2367.     program" bug.  The :x command can save the file, and if the backup
  2368.     option is set, then elvis runs "cp" or "copy", depending on the OS.
  2369.  
  2370.     In addition, a potential bug in the termcap interface was fixed.
  2371.  
  2372. ? Some crashes/hangs have been reported under Linux.  These may have something
  2373.   to do with <u> and <Shift-U> commands.  Usually there are no clues, but at
  2374.   least twice the buffer filled with ^@ characters.  Reported by Steve Woodard,
  2375.   woodard@kodakr.kodak.com
  2376.  
  2377.     I enabled assert() checking and allocation debugging, and played
  2378.     around with those commands hundreds of times without being able to
  2379.     reproduce it.  It may be compiler- or OS-dependent.
  2380.  
  2381.     1/20: It happened to me while I was just editing a plain old text file.
  2382.     One of the numbered cut buffers' bufinfo blocks was recycled as a text
  2383.     block, and that cause blkread to fail as it tried to find a bogus
  2384.     blklist block.
  2385.  
  2386.     This happened to me again, shortly after a <Shift-U>.  Definitely a
  2387.     problem there.  I've inspected the code though (bufundo() in buffer.c)
  2388.     and it seems correct.
  2389.  
  2390. * The "ref" program doesn't understand compound tag addresses, such as
  2391.     bar    foo.h    /^struct foo$/;/^ int bar;$/;"    struct:foo
  2392.  
  2393. * The "ref" program should be modified to support "./tags".  In fact, does
  2394.   it even support "tags" (file name instead of directory name)?
  2395.  
  2396.     How can it support "./tags" when ref doesn't know which file you're
  2397.     editing?  To do this right, I'd probably need to add a "-f fromfile"
  2398.     option.
  2399.  
  2400. / The value of the blkcache option can have a *HUGE* effect on the speed of
  2401.   elvis.  Why should a large cache be necessary?  A macro may crawl when
  2402.   blkcache=150, and fly when blkcache=200.
  2403.  
  2404. * An ex search command (:/foo) doesn't highlight text when autoselect is true.
  2405.   This is unfortunate, because the X11 [Search] button uses that command.
  2406.  
  2407. * Problems with the "ctags" program:
  2408.   1) `extern "C"' seems to confuse it a lot.
  2409.   2) It doesn't know that #defines can't be in a class.
  2410.   3) A predeclaration of a class name (e.g., "class MyClass;") generates a
  2411.      tag but shouldn't.
  2412.   4) Bodies of class declarations aren't scanned but should be (with all
  2413.      generated tags being declared as being in that class).
  2414.      And could enum values maybe be detected as part of the same fix?
  2415.   5) C++ destructors (e.g., ~MyClass(void)) aren't found.
  2416.  
  2417. / Modify "elvis.ps" to sense the paper size automatically.  Replace "lppaper"
  2418.   with a list of driver-specific options; for PS, this should include frame,
  2419.   bar, punch, clipboard, font, and tray.  (The frame, bar, and punch options
  2420.   are already implemented, but you need to edit elvis.ps to change them.)
  2421.  
  2422. * Under X11, if you replace the controlfont with another of the same height,
  2423.   elvis doesn't redraw the toolbar.  Labels don't fit in the buttons anymore!
  2424.  
  2425. * Under X11, if a dialog has a locked field which is wider than a normal string
  2426.   field, it is shifted.  This is bad, because locked fields have no cursor so
  2427.   there is no way to shift it back again.  Also, the overall dialog width is
  2428.   chosen with the assumption that the whole locked field is visible.
  2429.  
  2430. * Problem: The "squid" HTTP proxy, when handling an FTP request to read a
  2431.   directory, returns an HTML document similar to Elvis' own format, but
  2432.   it uses relative file names in a weird way.  I suspect squid's method is
  2433.   incompatible with that used in "index.html" files on some FTP sites
  2434.   such as ftp://sunsite.unc.edu/pub/Linux/!INDEX.html, so this is probably
  2435.   really a squid bug, but I need to check.
  2436.  
  2437. / Some FTP servers make non-existent files look like directories.
  2438.   Specifically, the SIZE command returns "550-Argument is not a plain file".
  2439.   Need a better way to detect non-existent files.
  2440.  
  2441. / If the cursor is past the end of the buffer, then it looks weird.  This
  2442.   could be fixed by adding a "virtual" newline to the end of a file which
  2443.   doesn't end with a real one.
  2444.  
  2445. * If you use the scrollbar to scroll to the bottom of a large file in html,
  2446.   man, or hex mode, then when you reach the very end of the file (where you
  2447.   would expect see no part of the file, just ~'s) it jumps back so the window
  2448.   is completely filled with lines from the file.
  2449.  
  2450. * The "hex" display mode does strange things to 0x0a characters.  Those quirks
  2451.   are hard to eliminate, because that's the newline character and several
  2452.   commands are sensitive to newlines.  But eventually something should be done.
  2453.  
  2454. * In the "syntax" display mode, if a multi-line comment ends on the last
  2455.   character of the line just above the top of the window, and the comment
  2456.   ender string is one character long (which happens in Pascal, but not C),
  2457.   then elvis assumes that the top line of the window is a continuation of
  2458.   that comment.
  2459.  
  2460. * Ex command-line history is very weird.  If you recall an earlier command
  2461.   and edit it, you're actually editing the historic version.  I would prefer
  2462.   to have a new copy of that line created at the end of the history buffer,
  2463.   and have the editing take place on that new copy.
  2464.  
  2465.   The same thing happens with regular-expression history, and filter-program
  2466.   history.
  2467.  
  2468. * elvis's prompt cannot be answered from a keyboard map, an
  2469.   example (simplified and therefore useless):
  2470.  
  2471.           :map #1 :!more %^M^M
  2472.  
  2473.   the second ^M should answer elvis's prompt, that occurs after
  2474.   the shell escape, automatically (only for convenience, because
  2475.   `more' has its own prompt), but this doesn't work: I have to
  2476.   press <Return> manually - but then elvis recognizes the ^M - and
  2477.   moves the cursor one line down (to my surprise: if I map a
  2478.   single character to any key I can use this key to answer the
  2479.   prompt!)
  2480.  
  2481. * In the installation routine, create links named "vi", "ex", and "view".
  2482.   Similarly, supply .BAT files or something for Win32.
  2483.  
  2484. * Ctags doesn't produce "Mfilename" tags for main() functions in filename.c
  2485.  
  2486. * Sometimes text changes as you move the cursor over it in HTML mode.  This
  2487.   has also been reported in Hex mode, but I wasn't able to reproduce that, and
  2488.   it could easily have been a configuration problem anyway. (:set nonascii=...)
  2489.  
  2490. -------------------------------------------------------------------------------
  2491. ? Under X11, elvis was reported to get stuck in a loop while trying to step
  2492.   through the toolbar buttons in the x_tb_predict() function.
  2493.  
  2494.     It looks like there was only one button in the toolbar, and the
  2495.     buttons are organized in a circular list.  They shouldn't be a
  2496.     circular list!  How could that happen?
  2497.  
  2498.     This may have some indirect relationship to the way that the default
  2499.     geometry is parsed.  The system where this was reported had a
  2500.     geometry string that looked like "80x25+130" -- with no "+Y" value.
  2501.  
  2502. ? Trouble decoding URL-encoded addresses?  Compare elvis' code to that of
  2503.   VFY.  Also compare the osnet.c file to the VFY's code.
  2504.  
  2505. ? Sometimes the X11 interface refuses to give up keyboard focus.  I've seen
  2506.   this *VERY RARELY* with FVWM under Linux.  It has also been reported under
  2507.   OLVWM, and is supposed to be very common under TWM.  I suspect there is a
  2508.   race condition, perhaps because elvis (or something else?) isn't including
  2509.   a timestamp on a request?
  2510.  
  2511.     Hopefully this was a side-effect of the bug which caused elvis to
  2512.     request an invalid window size (width != basewidth + integer * inc).
  2513.     That bug caused elvis and the window manager to fight about window
  2514.     sizes (and thus burn a lot of CPU cycles!) which may have lead the
  2515.     window manager to treat elvis windows differently.
  2516.  
  2517. ? Does elvis handle ^M in macros differently than the standard vi?
  2518.  
  2519.     MS-DOS handles them differently than the standard Unix.  I suspect
  2520.     that's the main problem.  Elvis should try to avoid dependencies
  2521.     like that, though; perhaps ":source" should always read ex scripts
  2522.     in "unix" mode?
  2523.  
  2524. ? In the Win32/console version, the handling of the "dead" keys (^, ' and `)
  2525.   is wrong, they produce three characters, for instance ^<space> inserts #)^
  2526.  
  2527. / the read command omits the message 'read x lines' in some
  2528.   circumstances, one case that I can reproduce:
  2529.  
  2530.   call elvis for a new (empty) file, then do
  2531.  
  2532.       :r !echo "abc\ndef"
  2533.   twice
  2534.  
  2535.       I couldnt reproduce this here.  Hopefully that means it is fixed,
  2536.       but I doubt it.
  2537.  
  2538. / In lib/elvis.bwf, the Win32 copy command doesn't like the ">NUL".
  2539.  
  2540.     Unable to verify this bug; it works for me.  I have made a few small
  2541.     changes to osprg.c, but as far as I can tell, it should also have
  2542.     worked before those changes.  From the description of this bug, it
  2543.     sounds like ">NUL" was being passed to COPY.EXE as an argument.
  2544.  
  2545. / A URL with empty parameters ("http://localhost/sample.html?") has been
  2546.   reported to cause core dumps.  I was unable to reproduce this myself.
  2547.   It is possible that some other change that I made to the code has fixed
  2548.   this.
  2549.  
  2550.     Could not reproduce this.
  2551.  
  2552. / Elvis got hung on a slow machine running X11.  The cursor continued to blink,
  2553.   but elvis didn't respond to any events, including Expose or KeyPress events.
  2554.  
  2555.     Unable to reproduce this.
  2556.  
  2557. / These commands, taken from elvis.brf, cause a trap under NT:
  2558.   > I suppose you could make "elvis.brf" check the file's write permissions,
  2559.   > and check it out if it is read-only.  The following UNTESTED lines should
  2560.   > do the job:
  2561.   > 
  2562.   >         if dirperm(filename) == "readonly"
  2563.   >         then !co -l %
  2564.   >         if dirperm(filename) == "readwrite"
  2565.   >         then set noreadonly
  2566.  
  2567.     Worked for me.  (Actually, I used "then !attr -r %" since I don't
  2568.     have RCS for Win32.)
  2569.  
  2570. / The NT console port throws away any characters that the user types into
  2571.   the console window before elvis creates its own console buffer.  Ideally
  2572.   it shouldn't do that.
  2573.  
  2574.     I don't think it does.  It can be hard to tell, since (on my NT system
  2575.     at least) elvis creates its console buffer after only a second or so.
  2576.     But it looks like it works, and if the SetConsoleMode() functions do
  2577.     clobber the typeahead buffer, I'm not sure how to tell it not to do
  2578.     that.
  2579.  
  2580. / A long (>255 chars) error message from a compiler caused elvis to dump core.
  2581.   This was while running :make, of course.
  2582.  
  2583.     There's no obvious reason for this to happen.  All of the buffers for
  2584.     holding parsed parts of the error message are dynamically allocated
  2585.     and grow when necessary.  Perhaps the msg() command caused calc.c's
  2586.     buffer to overflow?
  2587.  
  2588.     This was actually reported for 2.0, not 2.1.  I was able to reproduce
  2589.     it under 2.0 but not 2.1, so I'll assume it was fixed somewhere along
  2590.     the way.
  2591.  
  2592. -------------------------------------------------------------------------------
  2593. / Change version to "2.1i-beta".
  2594.  
  2595. / The "-b blksize" option doesn't verify that the requested size is a power
  2596.   of 2.  It must!
  2597.  
  2598. / The command "elvis -Gquit -cq -b16384" causes a core dump.
  2599.  
  2600.     Actually, anything that generated a non-fatal, non-status message
  2601.     was causing core dumps when elvis was invoked with the "quit" or
  2602.     "script" user interfaces.
  2603.  
  2604. / It would be nice if regexp character classes allowed extra characters after
  2605.   the :alnum: or whatever.  E.g., /[:alpha:_][:alnum:_]*/ find C identifiers.
  2606.   MORE IMPORTANTLY, did I really implement the right syntax?  The POSIX specs
  2607.   could be interpretted as meaning that you need an extra set of brackets
  2608.   around the named classes.
  2609.  
  2610.     Apparently POSIX does require an extra set of brackets, as in
  2611.     /[[:alpha:]_][[:alnum:]_]*/ for matching C identifiers.  I've changed
  2612.     elvis' regexp code, and the lib/elvisre.html documentation file.
  2613.  
  2614. / The visual / command doesn't allow / in a character class.  In fact, it
  2615.   appears that *all* regular expression parsing code has this problem:
  2616.   ex addresses, and :g/:v/:s commands.  Tags may also have this problem,
  2617.   but since tag addresses never use character classes it is a moot point.
  2618.  
  2619. / Winelvis' "About" box should show the version number of the VERSION macro,
  2620.   or the o_version option.  (They're the same.)  In 2.1h and earlier, it is
  2621.   just hardcoded to show "2.1".
  2622.  
  2623. / All aliases seem to be enclosed in curlies, even the ones which were really
  2624.   defined on a single line.  Since the presence of curlies affects the way
  2625.   arguments are handled, this is a problem.  Apparently arguments are appended
  2626.   on the *following* line, so they look like a separate command.
  2627.  
  2628. / Added OS/2 port to general distribution.
  2629.  
  2630. / Describe blksize in the manual.  Mention that it can only be set via -b#
  2631.   and explain why.
  2632.  
  2633. / The manual entry for MS-DOS (9.1) states incorrectly that you can change
  2634.   the blksize option in a configuration file.
  2635.  
  2636. / The manual needs to say more about filenames: wildcards, %, #, \, $env,
  2637.   (expr), ~, {a,b}, `command`.
  2638.  
  2639. / Typo in manual: "altername" should be "alternate".
  2640.  
  2641. / In elvisinp.html, ^R/^L get confused about the terms "window" & "screen".
  2642.  
  2643. / In elvis.syn, MS-DOS file names should accept uppercase extensions as well
  2644.   as lowercase.  E.g., .BAT and .bat.
  2645.  
  2646. / Make the X11 version check for WINDOWID *or* one of the known TERM values.
  2647.  
  2648. / If $name isn't found, should elvis try for $NAME?  This would be handy under    Win95 because most programs are insensitive to the case of environment
  2649.   variables but getenv() is case-sensitive.  It could also be construed to be
  2650.   more CSH-like, which is probably a good thing.
  2651.  
  2652. / How about a command-line option for redirecting stderr (and maybe stdout?)
  2653.   to a log file?  This would provide an easy-to-document means by which
  2654.   Windows95 users can store error messages.
  2655.  
  2656. / The manual entry for "elvis.ses" still tries to use the old "binary" option.
  2657.  
  2658. / If the "backup" option is set, :wq can cause a core dump at guitcap.c:1547
  2659.  
  2660. / Tag searches on operators don't work?  E.g., if you double-click on <<
  2661.   in a C++ program, it should search for the tag "operator<<" but instead it
  2662.   just fails.
  2663.  
  2664. -------------------------------------------------------------------------------
  2665. / Change version number to "2.1h-beta".
  2666.  
  2667. / For MS-DOS, the ^C key doesn't interupt macros, or long commands.  This is
  2668.   apparently due to the fact that MS-DOS only checks for ^C during a few
  2669.   specific system calls, and elvis doesn't use those calls when it is busy
  2670.   executing commands.
  2671.  
  2672.     I fixed this by adding a bogus kbhit() call to the ttypoll() function.
  2673.  
  2674. / The :a, :c, and :i commands are dropping the newline from the last line of
  2675.   multi-line text.
  2676.  
  2677. / For X11, the XGetInputFocus() function now returns void instead of a success
  2678.   indicator.  Need to modify guix11/guix11.c
  2679.  
  2680. / The sigaction() calls should not use sa_restorer, because it is deprecated.
  2681.  
  2682. / The [charlist] notation in regular expressions doesn't allow ] to be included
  2683.   in a regexp.  It should be allowed as the first character, or after an initial
  2684.   ^ character for negating the list, or after a - as the end of a range.  Also
  2685.   need to document this.
  2686.  
  2687. / In osunix/osnet.c, the function netread() tries to return -1 to indicate
  2688.   an error.  It should return False.
  2689.  
  2690. / Problems remain with terminals that support dim text but not bright text.
  2691.   md/me/mh termcap attributes.
  2692.  
  2693. / The backslash changes for aliases seems to have broken backslash handling
  2694.   for commands like...
  2695.  
  2696.       g/foo/a\
  2697.       one\
  2698.       two
  2699.  
  2700.   ... which now adds an extra blank line.  Probably the :append command should
  2701.   be modified to expect a newline after the last line, and the normal '.'
  2702.   marker should ensure that the last added line ends with a newline.
  2703.  
  2704. / In ex mode if you hit <Enter> at the end of a file, elvis should give a
  2705.   better error message than "bad delta".
  2706.  
  2707. / In guiwin32/gwmsg.c, the gwclient_WM_DROPFILES() function needs to quote
  2708.   the dangerous characters (such as space) in the filename.
  2709.  
  2710. / The X11 interface can get stuck in a loop in which it continually resizes
  2711.   the window.  Apparently if there are two or more resize requests in the
  2712.   queue, and elvis adjusts itself for the first one, then the others will
  2713.   can change it to still another size.  This has been reported under TWM
  2714.   after a simple resize action.
  2715.  
  2716.     A somewhat sleazy way to reproduce this: Start elvis.  From within
  2717.     elvis, start xkoules.  While elvis is waiting for xkoules to exit,
  2718.     resize the elvis window *twice*.  Exit xkoules.
  2719.  
  2720.     Possible fix: When elvis gets one configure request, it can try to
  2721.     read as many more as possible, and only use the last one.
  2722.  
  2723. ? Problems with German keyboards under X11.  The modifiers don't appear to
  2724.   work correctly, which prevents { } [ ] ~ @ \ | from being enterable.
  2725.   Reported by Juergen Preuss (preuss@cach02.chm.tu-dresden.de).
  2726.  
  2727.     I borrowed some code from RXVT, which had borrowed it from XTerm.
  2728.     Hopefully this will solve the problem.  It doesn't seem to have
  2729.     broken anything for US keyboards, but that's all I can test myself.
  2730.  
  2731. / ctags can't handle derived classes: "class foo: public bar {...}" should
  2732.   generate an entry for "foo" and ignore "bar".
  2733.  
  2734. / The "tags" option needs to support a notation for "look in the directory of
  2735.   the current file".  Vim uses "./tags" for that.
  2736.  
  2737. / After a <L command, I got the message "15 lines NULLed".
  2738.  
  2739. / Some problems with the manual: The use of multiple -V flags should be
  2740.   explained somewhere.  The missing features of the DOS port should be
  2741.   writ large.
  2742.  
  2743. / The "version" option isn't being initialized correctly.
  2744.  
  2745. / Add a dummy "redraw" option.  Or maybe a real one.
  2746.  
  2747. / Change the html entry in "elvis.syn" to include more tags.
  2748.  
  2749. / When the "number" option is set, clicking the mouse sets the preferred
  2750.   column to the wrong value; If you click and then hit j/k, the cursor
  2751.   jumps to a different column.
  2752.  
  2753. / A crash was reported in the TeX mode.  Overflowed a token, perhaps?
  2754.  
  2755.     Perhaps; the token-getting function wasn't smart enough to handle
  2756.     long comments or expressions.  It should be that smart now.
  2757.  
  2758. / The online manual title says "elvis 2.0" -- change to "2.1".  Also, I saw
  2759.   a reference to "14.x" which should actually read "16.x"
  2760.  
  2761. / The "Tips" chapter of the manual should have a section on how to make elvis
  2762.   run faster.
  2763.  
  2764. -------------------------------------------------------------------------------
  2765. / Change version number to "2.1g-beta".
  2766.  
  2767. / Consistent crashes have been reported under Linux in the lp() function
  2768.   when elvis is compiled with gcc -O2, with ELF binaries.  Unfortunately, it
  2769.   works correctly when compiled with gcc -g, so we can't narrow it down any
  2770.   more than that.  Reported by William Cheung, wcheung@scc.spiralcomm.com
  2771.  
  2772. / In text-mode Win32, there are freaky problems reading from a program. 
  2773.   Just running a program works; filtering works; reading from a text-mode
  2774.   win32 executable such as ls.exe works.  Reading from anything else
  2775.   generally causes the output to show on your screen but not be inserted
  2776.   into the edit buffer.
  2777.  
  2778.     Got pipes working under Win95 in text mode, but not graphic mode.
  2779.     Would like to have pipes under graphic mode (WinElvis).
  2780.  
  2781. / Add the ability to run an external tag search program.  A new "tagprg"
  2782.   options will be invoked, and its stdout will be parsed as a series of
  2783.   tag lines, all of which are assumed to match the requested tag.
  2784.   If tagprg is undefined, then use the standard built-in tag searches.
  2785.  
  2786. / Both "windows" and "x11" have a scrollbar option, but they work differently.
  2787.   Should probably rename the x11 option to "xscrollbar".
  2788.  
  2789. / Temp files tend to accumulate under Win32.  Problem in oswin32/osprg.c?
  2790.  
  2791. / Rapid left-arrow while in input mode causes characters to be lost.  This
  2792.   only seems to show up in Win32 text-mode.
  2793.  
  2794.     This was fixed once before, I thought, in input.c:cleanup().
  2795.     I suspect new ctrl_o code in inputchange() is to blame for its
  2796.     reappearance.
  2797.  
  2798. / Using backslashes for multi-line commands doesn't seem to work right.
  2799.   It looks like there's no terminating '\0'.
  2800.  
  2801. / In WinElvis, the toolbar and scrollbar options don't quite work -- you can
  2802.   apparently turn them off, but you can't turn them back on again.
  2803.  
  2804. / The names of the "windows" font options conflict with the "x11" options.
  2805.   This is a problem because both sets of names appear in the elvisopt.html
  2806.   file, and :help needs to be able to find the right one.
  2807.  
  2808.     Changed the names of the "windows" options from normalfont, boldfont,
  2809.     etc., to normalstyle, boldstyle, etc.  This makes more sense anyway,
  2810.     since their values aren't really font names.
  2811.  
  2812. / ":w>>file" doesn't set the alternate file name correctly.  Also, the
  2813.   >>file notation doesn't seem to *create* a file if it doesn't exist;
  2814.   it should.
  2815.  
  2816. / The :set command doesn't permit trailing spaces.  It should.
  2817.  
  2818. / Need to find a way to nest the { ... } notation.
  2819.  
  2820. / The following should be undoable in a single step: @x macros, :map macros,
  2821.   :@x macros, :ab abbreviations, aliases, and :g/:v commands (which are already
  2822.   undoable as a single step).
  2823.  
  2824.     One possible way to do this: make bufwilldo() check the eventcounter,
  2825.     and do nothing if it hasn't changed since the previous bufwilldo().
  2826.  
  2827. / Under X11, toolbar labels should accept characters which aren't defined
  2828.   as meaning something else -- namely :"=?~ -- and trailing spaces should be
  2829.   ignored.
  2830.  
  2831. / Aliases should not affect the behavior of the exthenflag variable.
  2832.  
  2833. / Add :while and :do commands.  The while expression should be saved
  2834.   wherever the exthenflag flag is saved.
  2835.  
  2836. / The htmlescape() function in dmmarkup.c is reported to cause core dumps
  2837.   on an RS6000 running AIX, when compiled with optimization enabled.  If
  2838.   compiled for debugging, it doesn't dump core so specifics are hard to
  2839.   come by on this one.
  2840.  
  2841. / Under MS-DOS, elvis seems to write each character twice.  This was reported
  2842.   by a blind user who has a text-to-speech device hooked into his console.
  2843.  
  2844.     It doesn't do this with the termcap interface under Linux.  I suspect
  2845.     that it is having a hard time because the attribute and character
  2846.     bytes are written out seperately.
  2847.  
  2848. / Large :copy commands can get screwed up.  Try editing a large file, such
  2849.   as ex.c, and insert line numbers at the start of each line ("%!cat -n").
  2850.   Then do a ":100,500co1000" command.
  2851.  
  2852. / Sometimes keywords from elvis.syn are lost?  Saw some PERL code where
  2853.   "if" and "while" weren't in boldface.  The large number of PERL keywords
  2854.   may be a factor.
  2855.  
  2856.     Yes, that was it.  There was a silent limit of 256 keywords.  I have
  2857.     now increased that limit to 300 keywords.  I really need to recode
  2858.     the keyword hash table though -- it is unnecessarily kludgy.
  2859.  
  2860. / X11 dialogs should support a "locked" data type, because some options can't
  2861.   be edited.  If a row doesn't specify an option name, then that row's type
  2862.   should be "locked"; this will allow dialogs to display immutable information
  2863.   which doesn't come from an option.  If a row has neither an option nor a
  2864.   value, then its label should be centered in the dialog.
  2865.  
  2866. / Under MSDOS with TERM=dosansi or TERM=nansi, mouse highlighting is
  2867.   flakey, and linewrap causes some problems.  Also, running an external
  2868.   command causes the mouse cursor to vanish.
  2869.  
  2870. / Should allow certain words to be customized by language:  Submit, Cancel,
  2871.   Help, True, False.  Create options named "true" and "false" for storing
  2872.   the local versions of those words; this will also have the pleasant side
  2873.   effect of allowing the english words "true" and "false" to be used as
  2874.   though they were Boolean literals in expressions.  The other words are
  2875.   only used by the "x11" user interface.
  2876.  
  2877. / The saveregexp option doesn't do enough.  It protects the regexp, but
  2878.   it needs to protect the substitution text and the substitution flags too.
  2879.  
  2880. / Need to replace <xmp></xmp> with <pre></pre> in the lib/*.html files.
  2881.   <xmp> is obsolete, and elvis doesn't implement it correctly anyway.
  2882.   Also add <code> to dmmarkup.c, as a synonym for <tt>, and use <code>
  2883.   in the lib/*.html files.
  2884.  
  2885. / The :w command affects the value of the "exthenflag" flag.  The elvis.bwf
  2886.   and elvis.awf scripts (and others) should probably save the value of
  2887.   exthenflag, and restore it afterward.
  2888.  
  2889. / In a :ab! abbreviation, expansion doesn't take place if the short form
  2890.   is the last thing on a command line.
  2891.  
  2892. / Under Win32, it should be able to parse UNC names (\\machine\directory\file)
  2893.  
  2894.     Apparently the only missing piece is that elvis should not change
  2895.     the leading \\ to \.
  2896.  
  2897. / The termcap interface can't use "dim" unless there is also a "bold" escape
  2898.   sequence.  There's no need for that!
  2899.  
  2900. / The :ta command doesn't offer any way to supply values which contain
  2901.   colons or whitespace.
  2902.  
  2903. / Long moves don't necessarily center the cursor line in the window.  See
  2904.   the "!!!" comment in dmnormal.c.  To fix this, I'll need to pass the
  2905.   window pointer into the setup function.  (Some other setup functions could
  2906.   benefit from this, too.)
  2907.  
  2908. / The :ta command should be smarter about setting the previoustag option.
  2909.   Whenever you jump to a tag, previoustag should be set to the name of that
  2910.   tag.
  2911.  
  2912. / Add a Windows version of the "quit" GUI to WinElvis.  The normal "quit"
  2913.   interface isn't supported there, and the text-mode version of elvis doesn't
  2914.   support "lptype=windows".
  2915.  
  2916. / When ^L is defined as forcing a redraw in input mode, it can break some
  2917.   common macros.  Perhaps it should be left as a normal "insert me" character.
  2918.   Users could still redraw the screen while in input mode by typing ^O^L.
  2919.  
  2920. / Bottom button of X11 scrollbar isn't drawn initially.  It appears after
  2921.   an expose event, or after any colon command including colon-backspace.
  2922.   I suspect the scrollbar is first drawn with a height of 0, and the top
  2923.   button is drawn over the top of the bottom button.
  2924.  
  2925. / On AIX systems, the toolbar is drawn incorrectly.
  2926.  
  2927. / Control-V should display a carat on the screen, while waiting for the
  2928.   quoted character.
  2929.  
  2930. --------------------------------------------------------------------------------
  2931. / Change version number in version.h to "2.1f-alpha".  (n.b. I haven't been
  2932.   doing a consistent job of updating this list as bugs are fixed, or as new
  2933.   versions are uploaded.  There *were* some fixes between 2.1b and 2.1f.)
  2934.  
  2935. / An expose event causes the scrollbar to be redrawn, even if it should really
  2936.   be blanked out (because the cursor is on the bottom row).
  2937.  
  2938. / Under Win32 or DOS, text-mode "elvis -?" outputs a line of garbage after
  2939.   the help message.  The garbage consists of uninterpretted escape sequences,
  2940.   emitted as the termcap interface shuts itself down.
  2941.  
  2942. / When invoked in the current directory, with the "exrc" option set, elvis
  2943.   will source the ./.exrc file twice.
  2944.  
  2945. / Abbreviations can get stuck in a loop.  Self-referential abbreviations
  2946.   should be disallowed.  (Actually, should an abbreviation *ever* expand
  2947.   another embedded abbreviation?)
  2948.  
  2949. / The :& command doesn't seem to be working correctly in all circumstances.
  2950.   After doing a ":%s/.$" on one buffer, and then switching to another buffer,
  2951.   the command ":%&" did not work.
  2952.  
  2953.     This is because the "elvis.arf" file uses a :s command to locate and
  2954.     execute modelines.  There is no easy way to fix this, unless you think
  2955.     ":set nomodelines" is an acceptable solution.
  2956.  
  2957.     Here's an idea: Create a new "saveregexp" option.  Leave it on
  2958.     normally, but turn it off when doing the modeline search.  Also force
  2959.     it off while searching for tags for the "showtag" option.
  2960.  
  2961. / The command ":g/old/s//new/g" doesn't work in 2.1e.  It worked in 2.0, so
  2962.   some recent change must have broken it.
  2963.  
  2964. / When returning after a :bb command, the cursor is moved to the top of the
  2965.   buffer instead of its previous position.  The best way to fix this would
  2966.   be to add a "winpos" field to the BUFFER struct, and set it to the cursor
  2967.   position before each ^W command or ex command.
  2968.  
  2969. / The X11 interface doesn't handle Expose events during time-consuming
  2970.   commands such as :make.
  2971.  
  2972. / If bufdisplay is set to "man", "html", or "tex", then ^Wd should probably
  2973.   toggle between "syntax" and bufdisplay, rather than "normal" and bufdisplay,
  2974.   so the source text will be displayed with syntax coloring.
  2975.  
  2976. / In ioopen(), the usestdio flag is never turned off.
  2977.  
  2978. / The :make command is insensitive to the gui->poll function.
  2979.  
  2980.     It does set the pollfrequency option to 1 while it is running, but
  2981.     I think maybe it also needs to call the guipoll() function to reset
  2982.     its internal count-down.
  2983.  
  2984.     Update: It does detect it, but not until the next line comes in from
  2985.     the compiler.  This can take a while.
  2986.  
  2987. / The :g and :v commands don't work correctly on last line.  If the last line
  2988.   is supposed to be affected, it appears to actually affect the *FIRST* line.
  2989.  
  2990.     The behavior of this bug is more complex than that, actually.  More
  2991.     testing is needed.
  2992.  
  2993. / The :s command doesn't handle counts correctly.  It should treat a count as
  2994.   a quantity of lines, but instead it treats it as a selector for the instance
  2995.   of matching text to change in each line.
  2996.  
  2997. / In the "x11" interface, the tool buttons should wait until the mouse button
  2998.   is released.  Otherwise the "quit" button could leave the mouse pointing at
  2999.   some totally unrelated window WITH A BUTTON PRESSED!  Surprise!
  3000.  
  3001. / If the "number" option is set, then the printout should show line numbers.
  3002.   It should also cause page headers to be printed.
  3003.  
  3004. / Often it would be handy to allow ":e !command" or ":sp !command" to fill an
  3005.   untitled buffer from a filter command.  For example, ":sp !man \@ | col -b"
  3006.   would cause a window to pop-up, showing the man-page for the word under the
  3007.   cursor.
  3008.  
  3009. / In the syntax display mode, the directory in which the current file resides
  3010.   should assumed to be in the search path.  For example, if you're editing
  3011.   osunix/tcaphelp.c, and you double-click on "tcaposix.h", then elvis should
  3012.   be smart enough to load osunix/tcaposix.h.  Currently it isn't.
  3013.  
  3014. / The assert() statement in ex_qall() needs "|| xinf->command==EX_ONLY".
  3015.  
  3016. / If the backspace key sends ^? (and the tty settings indicate this) then
  3017.   elvis should treat ^? as ^H.
  3018.  
  3019. / It would be nice if elvis supported HTML frames, in the least-complex
  3020.   manner possible: Treat <FRAME SRC=... ALT=...> like <A HREF=...>...</A>
  3021.  
  3022.   Similarly, it would be nice if an <IMG> which isn't an hypertext reference
  3023.   would fetch the image data (perhaps reading it into a temporary edit buffer)
  3024.   and then send it to a configurable program; the default should be "xv -"
  3025.   so the image is displayed by xv.
  3026.  
  3027. / If ":make" is used in a window which is displaying an internal buffer
  3028.   (especially the "Elvis error list" buffer), and there is another window
  3029.   which is displaying a non-internal buffer, then the command should be run
  3030.   in that other window.  This is simply for convenience -- after going to the
  3031.   trouble of displaying an internal buffer in a window, the user probably
  3032.   doesn't want to use that same window to show a buggy source file.
  3033.  
  3034. / Some older X-windows servers don't have XrmCombineFileDatabase().
  3035.  
  3036. / If you are displaying a cut buffer in a window, then you can try to yank
  3037.   text from a cut buffer into itself... but cutyank() isn't smart enough to
  3038.   handle that correctly; elvis hangs.  Probably cut buffers should be locked.
  3039.  
  3040. / The :pop command should wipe out the list of matching tags.  This will
  3041.   allow elvis's enhanced tags to act more like traditional tags for users
  3042.   who are in the habit of using ^]^T to glance at the definition of a tag.
  3043.  
  3044. / The X11 resource "*foreground: somecolor" makes toolbar buttons unreadable.
  3045.  
  3046. / The install procedure should copy lib/elvis.xpm and lib/elvis.xbm into the
  3047.   /usr/include/X11/{pix,bit}map directories.  Also, small icons would be nice
  3048.   (pixmaps of size next/normal=56x46, small=21x18, and mini=17x14)
  3049.  
  3050. / The "Delete Window" button of the last elvis window should not simply fail;
  3051.   it should do a ":close" command instead.
  3052.  
  3053. / In the "html" display mode, if a token begins with   then elvis
  3054.   mistakes the token for a whitespace token; the remaining characters aren't
  3055.   displayed.
  3056.  
  3057. / The x, X, ~, and r commands don't work correctly when the count exceeds
  3058.   the number of characters in the line.  They should implicitly reduce the
  3059.   count; but instead they're just ignoring the command.
  3060.  
  3061.     Actually, r and X are supposed to fail, and they do.
  3062.     x should fail, but elvis just deleted to left.  Now it fails correctly.
  3063.     ~ should reduce the count.  It didn't before, but it does now.
  3064.  
  3065. / The character search commands stop at a newline, even if the current display
  3066.   mode uses some other definition of a "line".
  3067.  
  3068. / The X11 interface should handle GraphicsExpose events when scrolling a
  3069.   window which is partially obscured.
  3070.  
  3071. / Add support for hardtabs/ht option.  And then ignore it, since elvis never
  3072.   outputs hard tabs.
  3073.  
  3074. / The "flash" option doesn't work.
  3075.  
  3076. / The current("word") function sometimes causes a core dump.  This occurs when
  3077.   the cursor isn't located on a word (but sometimes that works too).
  3078.  
  3079. / Elvis uses an option named "buffers", but that clashes with a variable
  3080.   declared in some systems' <stdio.h> file.  Change to "elvis_buffers".
  3081.  
  3082. / Elvis checks for :mh=: even if :me=: is undefined.  It shouldn't.
  3083.  
  3084. / Under NT, in the GUI version, the Options/Syntax menu item brings up
  3085.   Dr. Watson.
  3086.  
  3087. / Cut/Paste don't work in Win32/gui?
  3088.  
  3089.     Verified.  A true bug.  It attempts to cut/paste whole lines (?) via
  3090.     the ">/"< buffer, but the underlying GUI clipboard functions don't
  3091.     seem to work.
  3092.  
  3093. / Win32: There is a limit to how small a window can be: 2 rows of 30 characters.
  3094.   Resizing the screen to be smaller than that (by dragging an edge/corner of
  3095.   the window frame) causes elvis to crash.
  3096.  
  3097. / Win32: If you use a mouse click to position the cursor, and you jiggle
  3098.   the mouse slightly, then WinElvis starts highlighting text.  Xelvis is less
  3099.   sensitive to jiggles; it requires you to drag the mouse into a different
  3100.   character cell before it'll start highlighting, which seems to work well.
  3101.  
  3102. --------------------------------------------------------------------------------
  3103. / Change version number in version.h to "2.1b-alpha"
  3104.  
  3105. / The X icons still say "2.0", even though we're working on 2.1 now.
  3106.  
  3107. / Some commands move the cursor to a different buffer when they shouldn't.
  3108.   For example, ":(otherbuf)1,20co." copies the lines correctly, but then it
  3109.   moves the cursor to line 20 of otherbuf.
  3110.  
  3111. / The "x11" interface should ignore MotionNotify except after a ButtonPress.
  3112.   Although elvis only requests MotionNotify events while a button is held down,
  3113.   some servers send them at other times as well.
  3114.  
  3115. / Ex parser doesn't support backslashes, for things like...
  3116.  
  3117.     :g/XXX/a\
  3118.     line1\
  3119.     line2
  3120.  
  3121. / Under X, pasting from the clipboard doesn't work during, e.g., a "5s"
  3122.   command.  (Probably true of Win32 gui, too.)
  3123.  
  3124. / Environment variables with underscores are not recognized in elvis scripts.
  3125.  
  3126. / A more sophisticated method for handling EOF would be appreciated.
  3127.   Suggestion:
  3128.       * Add a "readeol" option to each buffer, one of {unix, dos, mac, text,
  3129.         binary}, defaults to "text".
  3130.       * Add a "writeeol" option to each buffer, one of {unix, dos, mac, text,
  3131.         binary, same}, defaults to "same".
  3132.       * Add a "fileeol(filename)" function, returns the file's probable
  3133.         format, one of {unix, dos, mac, text, binary} by reading the first
  3134.         part of a file.  Returns "text" if no hard evidence of any other
  3135.         format.
  3136.     * Meanings of values: unix=LF, dos=CRLF, mac=CR, text=local convention,
  3137.       binary=no modifications, same=current value of readeol.
  3138.     * The "elvis.brf" file could do a "let readeol=fileeol(filename)"
  3139.       to detect non-text files automatically.
  3140.  
  3141. / Need a way to prevent :make from loading an erroneous BINARY file.
  3142.  
  3143. / The built-in calculator can easily overflow when fetching the value of an
  3144.   environment variable.  Possibly other situations, too.
  3145.  
  3146. / Under Unixware, when the termcap interface writes a '\n' character, the
  3147.   cursor is forced to column 0.  Should use :do=: or :DO=: instead.
  3148.  
  3149. / ":q!" doesn't turn off a buffer's "modified" flag or delete the buffer.
  3150.  
  3151. / The guitcap file never checks the LINES and COLUMNS environment variables.
  3152.  
  3153. / When entering a command line, ^Ocw places a $ as though it will replace
  3154.   the current word, but actually any text is inserted.
  3155.  
  3156. / The "program" option isn't documented.
  3157.  
  3158. / Under X11, some sites are missing the default fonts, or have goofy fonts
  3159.   aliased to "fixed" and "variable".  Probably appdefaults fix this for other
  3160.   applications.  Elvis should support some method of reading X resources.
  3161.  
  3162. / It would be nice if untar.c kept the date and permissions from the archive.
  3163.   This can't be done in ANSI C, but if POSIX calls are supported then it can
  3164.   be.  Maybe check for _POSIX_SOURCE?  Also, it would be nice if the untar
  3165.   executable could be prepended to the archive, to produce a self-extracting
  3166.   archive.
  3167.  
  3168. / Add a way to abbreviate (Elvis error list) and (Elvis map log).
  3169.  
  3170.     Done: You can now give use a quote character followed by the initials
  3171.     of any buffer in place of the buffer name.  So ("Eel) means the same
  3172.     as (Elvis error list).
  3173.  
  3174. / The "warningbells" and "warpback" options are both abbreviated "wb".  Change
  3175.   "warpback" to "xwb".
  3176.  
  3177. / The termcap gui should not attempt to catch SIGHUP.  It isn't necessary,
  3178.   and catching it can, in fact, cause the elvis process to go into a tight
  3179.   loop as it attempts to read from a dead tty.
  3180.  
  3181. / Add ^Wo and :only commands -- like :qall except they only close (don't
  3182.   delete buffers) and don't affect the current window.
  3183.  
  3184. / Maybe add a "showname" option, to display the buffer name on the status
  3185.   line?
  3186.  
  3187. / The console's "Edit/Paste" menu item doesn't paste all of the characters
  3188.   that it should.  (Also, it doesn't work correctly for Chinese text... but
  3189.   that may be too big a problem for now.)
  3190.  
  3191. / The manual should mention that "ignorecase" doesn't affect character classes.
  3192.  
  3193. / The status line isn't redrawn when colors change.
  3194.  
  3195. / The "instman.sh" script doesn't invoke elvis correctly to format the
  3196.   man-pages.  It uses "-gquit" instead of "-Gquit", and the EXINIT variable
  3197.   as no effect because ELVISPATH=dummy.
  3198.  
  3199. / there seems to be a `!' substitution in command lines, this may
  3200.   be a "generalisation" of vi's command repetition `!!' (which
  3201.   allows command repetition and appending to a command, i.e.
  3202.   `!' substitution occurs only at the beginning of a command);
  3203.   IMHO the `original' behaviour (which was also implemented in
  3204.   elvis18) is better, because a substitution inside of a command
  3205.   is rarely needed, but now you have to quote all exclamation marks
  3206.  
  3207. / in vi the `print' and `list' commands query the `number' flag
  3208.   (and behave according to it, i.e. print line numbers or not)
  3209.  
  3210. / the join command could display a message like 'x lines joined'
  3211.  
  3212. / In the termcap interface, if you hit <Esc> in command mode, the following
  3213.   character is eaten.
  3214.  
  3215.     This is normal.  Hitting <Esc> causes the terminal to be "alerted,"
  3216.     which has the side effect of throwing away any characters already in
  3217.     the type-ahead queue.
  3218.  
  3219. / The defaultreadonly option is ignored.  The bufload() function resets each
  3220.   buffer's readonly flag before loading the file.
  3221.  
  3222. / if I call the (ex) join command with an adress range of 1 line
  3223.   (not a single adress, sounds strange, but see below ...) it
  3224.   joins 2 lines, but -per definition- it should do nothing
  3225.  
  3226.   e.g.:           :3,3j             joins lines 3 and 4!
  3227.  
  3228.   why bother? ... try the following command:
  3229.  
  3230.                 :v/./,/./-j
  3231.  
  3232.   in vi it compresses consecutive blank lines to one, but,
  3233.   due to the behavior of `join', elvis deletes all blank lines
  3234.  
  3235. / the following I've already reported, but now I can describe the
  3236.   error more precisely, also I can give you a hint, how to fix
  3237.   it:
  3238.  
  3239.       elvis deletes one `level' of backslashes before passing a
  3240.       command to the shell (concerns ex's `!', read and write
  3241.       commands, NOT vi's filter command !)
  3242.  
  3243.   I think it's easy to fix, but you should prove it; in `ex.c'
  3244.   change line 1228:
  3245.  
  3246.         if (*refp && !CHARchr(toCHAR("%#!@\\"), **refp))
  3247.                           ^^
  3248.                           delete this
  3249.  
  3250. / In the relative part of a line address, the "+" is optional.  I.e., the
  3251.   command ":.,.3y" should be identical to ":.,.+3y".
  3252.  
  3253. / The command ":g/^/m0" should reverse the order of all lines, but elvis
  3254.   just gives the message "destination can't be inside source".
  3255.  
  3256. / WinElvis doesn't print graphic characters correctly.
  3257.  
  3258. / Add support for multi-line strings which don't require a backslash.
  3259.  
  3260. / Typing some text and then (without hitting Esc) allowing the left arrow to
  3261.   autorepeat causes some characters to be lost.  This only happens under the
  3262.   X11 user interface.
  3263.  
  3264. / The description of the "keywordprg" option says that $1 is replaced by the
  3265.   current word, but currently the word is appended to the option's value.
  3266.  
  3267. --------------------------------------------------------------------------------
  3268. / Change version number in version.h to "2.1a-alpha"
  3269.  
  3270. / Changing one option via the Options menu causes all options in that dialog
  3271.   to be set, so ":set" with no arguments causes them to be displayed.
  3272.  
  3273.   FIXED: This is actually due to a quirk in elvis' options.c file.  I've fixed
  3274.   it.  Previously elvis didn't store the default value for each option; now
  3275.   it'll save the values of all options immediately after executing "elvis.ini"
  3276.   as the defaults.  Each option's OPT_SET flag will be set or cleared after
  3277.   a value is assigned to the option, depending on whether the new value
  3278.   matches the default value.
  3279.  
  3280. / Bug in filename completion under all Microsoft OSes (not just in Win32 gui):
  3281.   If you enter a directory name and partial file name using forward slashes,
  3282.   the substituted name will drop the directory name.  If I use a backslash,
  3283.   it works correctly.  For example, "guiwin32/gu<Tab>" becomes "guiwin.c" but
  3284.   "guiwin32\gu<Tab>" becomes "guiwin32\guiwin.c".
  3285.  
  3286.   FIXED, at least for Win32.  It is due to minor bugs in the osdir.c functions.
  3287.  
  3288. / In the X11 user interface, I've received some requests for more configuration
  3289.   options for the cursor.  Some folks don't like the hollow rectangle.  Add a
  3290.   new "cursorstyle" option which can be set to hollow, opaque, or xor.
  3291.  
  3292. / In addition to "xterm", perhaps guix11.test() should check for "iris-ansi"
  3293.   (for SGI) and "dtterm" (for CDE).
  3294.  
  3295. / In text mode, the cursor jumps to lower-right corner after each keystroke.
  3296.   Annoying on slow terminals.  This appears to be an attempt to clear the line,
  3297.   by drawing a bunch of spaces before the statusline text (showmode, ruler).
  3298.  
  3299. / Errors that occur interactively should not set exitcode to 1.
  3300.  
  3301. / eventreplace() doesn't move the cursor to the correct location.
  3302.  
  3303. / Add WinElvis and WinTags to the "makwin32.bat" file.
  3304.  
  3305. / In WinElvis, if the text doesn't completely fill the window, then the
  3306.   scrollbar will look funny.  This is unavoidable.  We would like to have
  3307.   the scrollbar's thumb completely fill the scrollbar (since the text
  3308.   completely fills the window) but Win32 tries to do us a favor by removing
  3309.   the scrollbar in that situation.
  3310.  
  3311. / :only can cause a core dump.  Try starting elvis without a file, running :sp
  3312.   and then :on
  3313.  
  3314. / :close can close the last window.  It shouldn't.
  3315.  
  3316.     Actually, that's a pretty convenient behavior to support.  The window's
  3317.     "close" button does a :close, which should be able to close the last
  3318.     window... if there aren't any modified buffers.
  3319.  
  3320. / Under Win32, if you move the pointer outside of the text window, it isn't
  3321.   restored to its intended shape when you move it back in again.
  3322.  
  3323. / Under X11, the resource for button colors must not be named "foreground".
  3324.   That leads to a foreground-on-foreground problem, so button labels aren't
  3325.   legible.
  3326.  
  3327. / Under X11, -client isn't sensitive to which machine the command is running
  3328.   on.  Perhaps the "ELVIS_SERVER" attribute name should be renamed to
  3329.   "ELVIS_ON_{hostname}".  Another problem is that user ids may differ --
  3330.   running in root and as a real user, for example.
  3331.  
  3332. / Backslash needs to be treated literally in more situations, especially
  3333.   under Win32.  A name like "C:\tmp\_tempfile" should be treated literally.
  3334.  
  3335.   The worst case is something like "C:\temp\$wc\foo", where the "$wc" is
  3336.   supposed to be literal.  I don't think anything can make this be rational!
  3337.   The current code interprets the backslash as a quote for the $ character,
  3338.   so elvis loads "C:\temp$wc\foo".  If backslash was literal, it would try
  3339.   to perform environment variable substitution for "$wc".  The current
  3340.   behavior is about as good as it gets.
  3341.  
  3342. / Does the ":lpr" command support ">>" to append to files?  It should.
  3343.  
  3344. / If the buffer doesn't end with a newline, then the Y command will go into
  3345.   an endless loop.
  3346.  
  3347. / Newly created windows should acquire input focus... and when entered
  3348.   interactively they do.  But for macros and the "elvis -client -c ..."
  3349.   command, this doesn't work correctly.
  3350.  
  3351. / The :s command (not :s/old/new/) is supposed to repeat the previous
  3352.   :s/old/new/ command, but doesn't.  The :& command works correctly.
  3353.  
  3354. / Under Win32, the italic font is shifted slightly to the left -- which is
  3355.   fine normally, but not after a ":set italicfont=n".  Then it clips off
  3356.   the uprights of many letters.
  3357.  
  3358. / Skip the "Hit <Enter> to continue" prompt if we're in the middle of a map.
  3359.  
  3360. / Tweak the tags stuff to use the proposed standard.
  3361.     - Allow :" after the address in field 3
  3362.     - Interpret file: as file:(tagfile) -- i.e., file: marks static tags
  3363.     - In the extra fields, the values are subjected to the following
  3364.       translations: = becomes =3D, tab becomes =09, newline becomes =0A
  3365.  
  3366. / Writing via ftp doesn't turn off the "writing" flag when complete.  This
  3367.   causes the next read to fail in an assert() statement.
  3368.