home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / elvos221.zip / BUGS next >
Text File  |  1998-12-10  |  75KB  |  1,611 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.  About 80% 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. * The [[ and ]] commands shouldn't be line-mode moves.  I.e., from the middle
  15.   of a line, d]] should not delete the entire current line.
  16.  
  17. * It would be handy if, in a :tag command line, the % character was expanded
  18.   to the current file name.
  19.  
  20. * The tagprg option (or something similar) should be used when reading tags
  21.   for tag name completion.  Apparently it isn't.
  22.  
  23. / Some HTTP sites require a "Host:" line in the GET request.  The argument
  24.   to "Host:" is the site name and port of the URL elvis is trying to download.
  25.  
  26. / Check for licensing wordage in manual or README file.
  27.  
  28. / In the "configure" script, xinc is set to /usr/include/X11, when it should
  29.   be set to /usr/include.
  30.  
  31. ? Under WinNT 4.0sp3, the "vi.exe" and "ex.exe" commands have been reported
  32.   to cause problems.  Input doesn't work right, and the whole DOS window
  33.   goes away when elvis exits.
  34.  
  35. / In macros, !(.)% should work but doesn't.
  36.  
  37. ? Elvis has been reported to run out of memory when reading a large LaTeX
  38.   file -- "http://www.loria.fr/services/tex/general/latex2e.html", although
  39.   it isn't clear whether elvis is reading it via the net, or from a local
  40.   file.
  41.  
  42.     It worked for me.  The user didn't report what OS he's using.
  43.     I suspect he's running the DOS version, in which case it isn't
  44.     surprising that he's running out of memory (even with Win32 on
  45.     a 64meg Pentium).
  46.  
  47. / Change the default configuration to load lib/exalias.eg if there is no
  48.   custom version in the user's home directory.  Maybe rename it to
  49.   "elvis.ali" or something like that.
  50.  
  51. / Add an "lpheader" option, and modify dmnormal.c:header() to use it instead
  52.   of the "lplines" option.
  53.  
  54. / :s/re/cmd/x sets the cursor to the wrong line -- cmd should run on the line
  55.   where re was found, but it is incorrectly running on the following line.
  56.  
  57. / With textwidth set, if the first line of a file contains no whitespace
  58.   and extends past the textwidth column, elvis dumps core.
  59.  
  60. / Aliases tend to step on each other's use of options.  Many macros temporarily
  61.   set report=0 to avoid chatter while the alias runs.  To restore it, they save
  62.   the old value in the "r" option, and copy it back afterward.  If if one alias
  63.   calls another and they both do "let r=report", then the original value of
  64.   "report" is lost.  This is one specific example of a larger problem: aliases
  65.   need local options.
  66.  
  67.     I've added a ":local" command.  It is like ":set", except that it
  68.     saves the old values of any options on a stack, so they can be
  69.     automatically restored when the alias exits.  Also, ":local" never
  70.     outputs any options; this allows you to mark an option as being local
  71.     without immediately changing its value.
  72.  
  73. / Both "x11" and "windows" have an option named "toolbar".  It behaves the
  74.   same on both.  Soon they'll both have "statusbar".  They already had
  75.   "scrollbar" but I changed the name of the X version since they behaved
  76.   differently.  I should try to unify this somehow -- both in the program
  77.   and in the manual.
  78.  
  79. / The ":gui ~Label" notation for deleting a button doesn't work, but the
  80.   postfix ":gui Label~" version does.
  81.  
  82. / It would be nice if "gui <label>" would output all info about the given
  83.   button, under X11.
  84.  
  85. / The "tex" mode needs some work, especially for \xxx{text} notation.
  86.   Several common fonts are not supported, including \code{text}.
  87.  
  88. / Aliases can't run during initialization?  Remove that restriction.
  89.  
  90. / For gui="x11", cutting & pasting (between applications) large amounts
  91.   of text doesn't seem to work.  The text gets jumbled up.
  92.  
  93. / Write a "howto" file, and an alias to access it.
  94.  
  95. / In an empty buffer, search commands seem to get stuck in an infinite loop.
  96.  
  97. / The "inputtab=identifier" code should avoid looking up matches when the
  98.   word is a keyword.  When I type "int<Tab>i;", I don't want to get
  99.   "intlmsgi;"
  100.  
  101. / Add support for cygwin (GNU utilities and API under Windows).  The only
  102.   unusual things are 1) it needs the local inet_aton() function even though
  103.   that function is declared in a header, and 2) It doesn't seem to open files
  104.   in binary mode.  It should, both for session files and for (non-binary)
  105.   text I/O.
  106.  
  107. / On some Linux systems, the variable name "restrict" in tagelvis.c seems to
  108.   clash with a header symbol.  Changing it to "rest" avoids that.
  109.  
  110. / Core dump from io.c:564 when bufdefault is NULL.
  111.  
  112. / When abbreviations are expanded via the <Tab> key, elvis inserts a newline
  113.   after the expanded form, instead of the tab.
  114.  
  115. / Apparently ":try s/foo/bar/" doesn't turn off the the "then" flag when the
  116.   substitution fails.
  117.  
  118. / Some QNX problems:
  119.   / <sys/select.h> isn't included by every file that needs it.
  120.   / ftpperms is defined in two places.  (Lacks "extern" in header file.)
  121.   / inst*.sh files don't return a good exit code, which interferes with 
  122.     "make".  Add "exit 0" to the end of each script.
  123.  
  124. --------------------------------------------------------------------------
  125. Fixed in 2.1j-beta....
  126.  
  127. / File name completion doesn't always work on directory names, when the
  128.   completebinary option is off.
  129.  
  130. / It would be nice if, when listing multiple matches, filename completion
  131.   would leave off the directory path.  That way more matches would fit on
  132.   a single line.
  133.  
  134. / It would be nice if <Tab> completed tag names when editing normal source
  135.   code.  That would save you a lot of typing if you like long identifiers.
  136.  
  137. / On HP, "configure --with-gcc" isn't honored -- it still uses "cc -Ae".
  138.   Also, HP (and probably some other platforms) expect main() to return
  139.   an int, not void.
  140.  
  141. / If "elvis.arf" executes a :s///x command, then the window doesn't realize
  142.   that the buffer has changed so it doesn't set the display mode accordingly.
  143.   This shows up when you're editing non-HTML text, and do "e url" where
  144.   "url" is a URL or file which doesn't end with ".html", but which does
  145.   contain HTML text -- the buffer's bufdisplay option gets set correctly,
  146.   but the window isn't switched to html mode.
  147.  
  148. / The "alias.c" file can be compiled for Win32 and OS/2, which may be
  149.   handy for some people.  To eliminate warnings, it needs <stdlib.h>
  150.   and <process.h>.  Also, there's a "pid" variable which isn't used.
  151.   Some shells don't pass the program name in argv[0] so we need to
  152.   handle that -- probably compile it with a -Dxxx to make it default
  153.   to "ex", "vi", or "view".
  154.  
  155. / File name completion should be case-insensitive on non-Unix systems.
  156.  
  157. / The command "elvis -i" (with no file name) creates a buffer which
  158.   doesn't contain any text.
  159.  
  160. / From some URLs, a reference to a full pathname generates an error message
  161.   about an "unknown site" or something like that.  For example, from
  162.   http://www.fh-wedel.de, try following the "English pages" link.
  163.  
  164. / After ":se report=1", hitting x says "1 line yanked".  Need to make
  165.   reporting sensitive to the partiallastline option.
  166.  
  167. / Make elvis.arf strip off the perl version number from #!/usr/bin/perl-XXXX
  168.   lines.  This makes syntax easier to recognize.
  169. -------------
  170. * Under X11, the XV button doesn't work.  It reports that the temporary
  171.   file is empty.
  172.  
  173.     The XV button does ":w !xv - >/dev/null 2>&1 &".  The "x11" user
  174.     interface runs xv as a filter, so it can show the program's output
  175.     in the elvis window.  Since xv doesn't output anything useful, I
  176.     tried to avoid that by running it in the background.  However,
  177.     since pipes can fill up, elvis uses a temporary file for the filter's
  178.     stdin, and a pipe to read its stdout.  Running a program in the
  179.     background like this causes elvis to read EOF from the filter's
  180.     stdout immediately, so elvis immediately clobbers the temp file.
  181.     The filter (xv) sees no data on its stdin.  (Actually this is a
  182.     little surprising since elvis doesn't truncate the file; it deletes
  183.     it.  A deleted file is *supposed* to remain allocated until the
  184.     last file descriptor on it is closed.)
  185.  
  186.     The short-term fix is to avoid running filters in the background.
  187.  
  188.     The long-term fix is to make the "x11" interface smarter about
  189.     running programs in the background, so it can use a pipe for stdin;
  190.     This would also allow the removal of ">/dev/null 2>&1".
  191.  
  192. * If xcurses exists, it should probably be used in preference to curses.
  193.   (This would be a change to the "configure" script.)
  194.  
  195. * In "html" mode, if a single displayed line contains more than one link,
  196.   elvis always seems to follow the *last* link regardless of which one you
  197.   click on.  This is bad for some menu bars.
  198.  
  199.     Actually, this only seems to occur when multiple images appear
  200.     on a line, and you want to download one of the images.  For
  201.     real links, elvis works correctly.  This bug can wait until
  202.     after 2.1 is done.
  203.  
  204. * For gui="x11", if a window scrolls while some other window has pointer
  205.   focus, then the cursor isn't drawn.  This is important when, e.g., you
  206.   use a dialog to search for text.
  207.  
  208. * When the same buffer is shown in two windows, inserting text into one
  209.   window can cause the other to scroll.  This seems to occur only when
  210.   the location of the change is above the top line of the other window.
  211.  
  212.     Apparently what's happening is this: In a series of blank lines,
  213.     (i.e., lines which contain only a newline character), after any
  214.     character is inserted before line n, line n-1 has the same offset
  215.     than line n used to have, so the window update functions assume
  216.     that line n-1 is really still line n, so it shows line n-1 at the
  217.     top of the window instead of line n.
  218.  
  219. * Hitting ^] on an operator doesn't search for an "operatorXX" tag?  I
  220.   thought it did.
  221.  
  222. ? Elvis gets confused if you load a URL which has no filename component,
  223.   such as "http://www.yahoo.com".  Adding a trailing slash avoids that.
  224.  
  225. / Document the meaning of "!" for each ex command.
  226.  
  227. / If a :tag fails because the current file has been modified, then that tag
  228.   is still deleted from the list so ":w|tag" doesn't work.
  229.  
  230. / Add ~/.exalias to the distribution.  Maybe extend it with a few other
  231.   useful aliases such as "courier", "copying", "rm".
  232.  
  233. / When an href in a remote web page contains just a file name elvis tends
  234.   to mangle it.  From ftp://ftp.cs.pdx.edu/pub/elvis/unreleased/README.html,
  235.   <A HREF="/pub/elvis/untar.c"> is treated (under Unix anyway) as a reference
  236.   to ftp://ftp.cs.pdx.edu//ub/elvis/unreleased/pub/elvis/untar.c
  237.  
  238. / Got stuck in an infinite loop when doing =} at the end of the buffer.
  239.   There was no blank line at the end of the buffer.  The bug seems to
  240.   occur after the buffer has been changed, when elvis is trying to update
  241.   the screen.
  242.  
  243.     This appears to be a reliable way to duplicate the same big
  244.     session file bug I've been tracking for months!  At last!
  245.  
  246.     It goes away when LINECACHE is #defined to be 0.  Apparently
  247.     the cacheing in lowoffset() is broken.
  248.  
  249. / Can't search for 0x00 bytes.  /^X00^M doesn't work.
  250.  
  251.     Added \0 for matching NUL bytes.
  252.  
  253. / Trouble with the :& and :~ commands:
  254.    / They are supposed to discard any flags from the original :s command,
  255.      and accept new flags.  (This implies that the visual ~ command also
  256.      discards the old flags.)
  257.    / :& should always use the regexp from the previous :s command, but
  258.      :~ should use the most recent regexp used in any context.
  259.    / :s with no args should act like :&
  260.    / Also, the count isn't supposed to be an instance specifier, it is
  261.      supposed to be the quantity of lines to scan.  (The current instance
  262.      specifier is handy, though, so invent a new notation for it -- perhaps
  263.      a number after a '.' could be an instance.)
  264.    / Add 'c' flag.  This will require the creation of a new edit mode which
  265.      searches forward for next match within a range of lines, moves the
  266.      cursor there, highlights it, and waits for a keystroke.  <Esc> exits
  267.      that mode; <y> replaces and moves on, anything else moves on without
  268.      replacing.
  269.    / The print flags don't work.
  270.    / global subst for a zero-length regexp doensn't work.
  271.    / If a match is found at the start of the first line for a :s///c command,
  272.      the cursor is displayed in the wrong location.
  273.    / "confirm" doesn't work right in ex mode -- only in vi mode.
  274.     Modify it to use the same state-insertion technique as visual-mode,
  275.     and also make it exit ex mode.  The subst structure should be
  276.     extended to have a flag which indicates whether it should revert
  277.     ex mode when the last substitution is complete.  To revert, it
  278.     should replace the "confirm" state with either the old "ex" state
  279.     or a new one.
  280.    / check for memory leaks
  281.  
  282. / Add an alias() function, which tests for the existence of an alias with a
  283.   given name.  Modify the default elvis.[ab][rw]f files to check for an alias
  284.   and use that if it exists.  This will make customization easier.
  285.  
  286. / When using <a name=...>...</a> to define a name anchor, elvis shouldn't
  287.   display the anchor's text like an href link.
  288.  
  289. / In "man" mode, blank lines should not affect indentation.  I.e., they
  290.   should be interpreted  as ".sp", not ".LP".  Exception: If the blank
  291.   lines are followed by any "." command which causes a line break, then
  292.   ignore the blank lines.
  293.  
  294.   Also, for readonly files it should allow any number of args to a .BI
  295.   command (or similar commands).
  296.  
  297. / In "tex" mode, } should restore the current font to the stored font
  298.   (which it does in 2.1i) and then set the stored font to "normal" (which
  299.   is new).  This will help it handle embedded {...} pairs better.
  300.  
  301. / The autowrite option is too eager.  After :e thisfile, :sp, :e otherfile,
  302.   elvis writes thisfile even though it is still visible in the first window.
  303.  
  304. / Add the PERL "Artistic License" to the distribution.  Earlier I'd
  305.   announced plans to distribute elvis under both the old agreement and
  306.   the GPL, but the Artistic License does pretty much what I wanted.
  307.  
  308. / In macros and aliases, the current buffer and the current line within
  309.   the buffer are not changing as one would expect.  This makes macros
  310.   much harder to write than they should be.
  311.  
  312. / ":let x=TERM" causes a core dump.
  313.  
  314. / With Sun + fvwm + -Gx11 + ":set warpback", the pointer is warped back to
  315.   the xterm's scrollbar when you exit.  This is unfortunate because Sun's
  316.   xterm's scrollbar eats keystrokes.  The pointer should be warped back
  317.   to the middle of the top edge of the window.
  318.  
  319. / Add an example of command-line editing to the manual.
  320.  
  321. / Under DOS and Win32, the ctags program doesn't work.  It doesn't seem to
  322.   accept lowercase letters at the start of a word.
  323.  
  324. / There's a problem with file name completion.  When nocompletebinary,
  325.   if the only match is a binary file then it backspaces over the file name.
  326.  
  327. / Problem with "ref" program -- it doesn't seem to handle "file:" correctly.
  328.  
  329. / In "tex" mode, a % on a line by itelf causes the following line to be
  330.   ignored.  It shouldn't!  Also, \' should be displayed as \', not just '.
  331.  
  332. / Option value completion: If while entering an ex command, the user
  333.   types something like ":se kp=<TAB>" then elvis should insert the
  334.   current value of the "kp" option.  The user can then edit it.
  335.  
  336. / For Option value completion, need to insert a backslash before each
  337.   '|' character, because '|' normally marks the end of the command.
  338.   NOTE: Check whether this is done for :mkexrc -- it should be!
  339.  
  340. ? The "windows" GUI needs to insert backslashes before '(', ')', and '$'.
  341.   Look for addquotes() in guiwin32/gw{cmd,msg}.c
  342.  
  343. / Bug in :calc (filename " " (333 * 100 / 400)) >> 58
  344.  
  345.     This appears to be due to a quirk of the concatenation notation.
  346.     Since there is no explicit concatenation operator, it's difficult
  347.     to assign it a precedence level.
  348.  
  349. / Maybe support name completion for tags?
  350.  
  351. / If "showtag" is set, and the tags file is out of date, then you get a
  352.   bunch of "no match" messages for the tags that it can't find.
  353.  
  354. / On an empty buffer, it still says "partial last line".  That flag shouldn't
  355.   be set for new, empty buffers.
  356.  
  357. / Need to be able to create new files on FTP sites.  (And if you can do
  358.   that, then update the manual too.)  It would also be nice to have a
  359.   better way to detect directories.
  360.  
  361.     I have been unable to find any FTP protocol commands for testing
  362.     the attributes/existence of a file.  So I'll need to abuse other
  363.     commands and make some guesses.
  364.  
  365.     To test whether a name is a directory, I can try to "cd" into it.
  366.     Elvis always uses full pathnames for FTP access, so the current
  367.     directory doesn't matter.  But if I can "cd" into it then it must
  368.     be a directory; else it either doesn't exist, or is unreadable, or
  369.     is something other than a directory -- hopefully a normal file.
  370.  
  371.     To test for the existence of a file, I should probably try to read
  372.     it; if the read process starts okay, then I can abort it and know
  373.     that the file exists; otherwise it is unreadable, not a file, or
  374.     doesn't exist... and in all of those situations I should assume it
  375.     is a new file.
  376.  
  377.     If I know it exists and is a file, then I can test for writability
  378.     by attempting to append to it.  If the APND command can be started
  379.     correctly, then shut it down without actually appending anything and
  380.     make note that the file is writable; else it is read-only.
  381.  
  382. / In replacement text, \^M should be a literal carriage return character,
  383.   not a newline.
  384.  
  385. / In the "man" display mode, 2 or more consecutive newlines (i.e., one or
  386.   more blank lines) should act like a ".PP" command.
  387.  
  388. / In the "man" display mode, add .TS and .TE -- like .nf and .fi, except
  389.   that .TS has the added quirk of hiding the following line.  This will
  390.   allow elvis to display tables, sort of.
  391.  
  392. / The buffers created when reading a directory, browsing, etc., should be
  393.   marked as "readonly".  Without this, it is too easy to get a "Hit ^Wd
  394.   to see source" message.
  395.  
  396. / Should :@@ execute the anonymous buffer?  Elvis has trouble parsing it,
  397.   and after that it executes the same buffer as was most recently used.
  398.  
  399. / It should be possible to edit cut buffers, particularly so you can edit
  400.   @ macros.  To do this, I'll need to make sure a cut buffer doesn't get
  401.   yanked into itself.  It would also be nice if the line/char/rect status
  402.   wasn't embedded in the buffer's text (make a new "putstyle" option).
  403.  
  404. / Problems in untar.c?  Reported to fail on some archives.
  405.  
  406.     Walter Briscoe figured this one out for me.  I was altering
  407.     a block in the sliding window, when that block was interpretted
  408.     as a tar header.
  409.  
  410. / A little bit of name caching would be a big help for network name lookup.
  411.  
  412. / Filename completion really needs work.
  413.   / At the very least, it should exclude '<' and '>' from the list of
  414.     characters that can appear in a file name.
  415.   / It shouldn't be *too* hard to make a parser which guesses whether
  416.     filename completion makes sense in the current context.
  417.   / It might be a good idea to make filename completion be disablable via
  418.     #undef FEATURE_FILENAME.
  419.   / Another nice addition would be to make it ignore binary files.
  420.  
  421. ? :make can't parse AIX error messages, which look like this...
  422.     "cfunc.c", line 511.38: 1506-045 (S) Undeclared identifier incase.
  423.   I suspect the ".38" column number is tripping it up.  It would also be
  424.   nice to ignore the "1506-045 (S)" garbage.
  425.  
  426.     That's almost certainly the right diagnosis.  When elvis divides an
  427.     error message into words, it permits '.' characters in those words.
  428.     But it didn't allow '.' in a number, so "511.38" was perceived as
  429.     garbage.  I changed the allowable number format to permit '.'.
  430.  
  431. / The autoselect option is broken.  If set in .exrc, then it is reset the
  432.   first time you give a search command.
  433.  
  434.     This is an unexpected consequence of changing the definition of
  435.     "explicitly set options".  To fix it, I'll need to add a static
  436.     variable in search.c, and set the variable to True if 'v', to False
  437.     if 'n', and to the value of autoselect if neither 'v' nor 'n' is
  438.     given.  Then use that variable in place of the autoselect option,
  439.     when a search successfully finds a match.
  440.  
  441. ? Problem with .exrc scripts (and other scripts too) -- :map lines frequently
  442.   end with a ^M character.  Since this ^M appears immediately before the LF
  443.   that marks the end of the line, it looks like a CR-LF pair and so the file
  444.   may be seen as a DOS text file.  When interpretted on a DOS/Windows platform,
  445.   the ^M will be deleted.  It also messes up editing of the script on any
  446.   platform.
  447.  
  448.     I changed the way the fileeol() function recognizes file types.
  449.     If the first 100 bytes of the file contains at least one instance
  450.     of a LF which isn't preceded by a CR, then the file is assumed to
  451.     be a Unix text file.  This should allow Unix .exrc scripts to be
  452.     edited on a DOS/Windows system.
  453.  
  454.     To actually execute them, they should be converted to DOS/Windows
  455.     format.  That way, when a map command ends with ^M, the line that
  456.     it's on will end with CR CR LF, which will be handled properly by
  457.     elvis.
  458.  
  459. / Options aren't locked by "safer".  Some should be, including "safer"
  460.   itself.  How long has this security hole been there?
  461.  
  462. / Really need a way to queue up messages.  Add :message, :warning, :error.
  463.  
  464. ? When GCC is used under HP, don't use the "-Ae" flag.  The normal "cc"
  465.   compiler doesn't work under HP.
  466.  
  467.     I suspect this was due to some new-style function declarations
  468.     that were in 2.1i.  These have been fixed, so HP's "cc" should work
  469.     now.  "cc" is preferable to GCC on HPs because "cc" supports shared
  470.     libraries.
  471.  
  472. * Two ^Cs in sequence can kill elvis.  (OS-dependent)
  473.  
  474. * The X11 interface should support backtabs, for moving backward through
  475.   links in an HTML file.  Map <ISO_Left_Tab> to... what?  ^K and ^_ are
  476.   available.  If I add vim-style g commands, then <g><Tab> would make sense.
  477.   Is there a termcap/terminfo field for describing backtabs?
  478.  
  479. * Can't run a shell command in the background under X11, because elvis waits
  480.   for an EOF condition on its stdout/stderr.  Should something be done about
  481.   that?  (You can do it if you redirect the program's stdout and stderr.)
  482.  
  483.     Maybe make the x11 prgopen() wrapper check for a '&' command, and
  484.     force "willread" to False in that situation.  But then prgread()
  485.     would need to be smarter, or something.
  486.  
  487. * After <Shift-K>, the window's wantcol value is messed up -- if you type
  488.   <Shift-K><j>, the cursor will move to the first character on the following
  489.   line, instead of staying in the same column.  (This may affect all external
  490.   commands -- test it!)
  491.  
  492.     This only affects <Shift-K>, and even then only in some situations.
  493.     The column that it moves to varies.  I wasted a whole day trying
  494.     to figure this one out, with little success.  It seems to have
  495.     something to do with the copies of wantcol that are stored in
  496.     the state stack.
  497.  
  498. * ":set global?" scrolls off the top of the screen.  Something should be done
  499.   about that.
  500.  
  501.     The fix will probably have to wait until "shell windows" are
  502.     supported.  They'll allow you to scroll back through the output,
  503.     like an xterm window.
  504.  
  505. * Under MS-DOS, "-o file" can cause a NULL dereference.  File permissions?
  506.  
  507.     Or memory limitations?  I looked through the code and it appears to
  508.     be correct.  It is simple enough that it I don't think there could
  509.     be any subtle bugs in it.
  510.  
  511. * Big clues on why sometimes session files can't be recovered:
  512.  
  513.     > This may be interesting. I will pursue it if given instructions.
  514.     >  
  515.     > I got a GPF on a telnet session in which I was running elvis.
  516.     > `elvis -r` got "blkread failed". The read failed with errno set to
  517.     > 22 which is a singularly unhelpful EINVAL.
  518.  
  519.     Probably the EINVAL was left over from some earlier system call, so we
  520.     can ignore it.
  521.  
  522.     blkread() failed because it was asked to read a non-existent block
  523.     number.  Block 29474 would be at offset 60362752, but the session
  524.     file you're recovering is only 344064 bytes long.  So the read() in
  525.     blkread() returned 0 bytes, which would not affect errno.
  526.  
  527.     > I infer there is a window of time during which a session file is
  528.     > not clean.  I don't understand the details of this and don't feel
  529.     > like deducing them.  What do you want to be done?
  530.  
  531.     Apparently elvis needs to inspect the session's low-level buffers more
  532.     carefully before I restore them.  In your session file, there is a
  533.     low-level buffer (at block 52) which contains a reference to a bogus
  534.     block number, and that's preventing you from restarting elvis to
  535.     recover the other buffers in that session file.
  536.  
  537.     As I recall, the most common source of bogus block numbers was when
  538.     a blklist block was reused as some other type of block.  I suspect
  539.     that in your session file, the buffer at block 52 was freed, along
  540.     with its blklist blocks, but the superblock was never flushed after
  541.     that.  And the blklist block was recycled as a chars block for
  542.     some other buffer, and that *was* flushed.  (Block numbers are
  543.     two bytes long, and 29474's bytes are '"' and 's').
  544.  
  545.     So probably in addition to making recovery stricter (so it can ignore
  546.     bad buffers), elvis should also probably flush the superblock
  547.     immediately after freeing a buffer so that this particular type of
  548.     bad buffer can't occur.
  549.  
  550.     (Yes, I am going to save a copy of this response for myself.)
  551.  
  552. / :mkexrc doesn't insert enough ^Vs in front of Esc characters.
  553.  
  554. / Under X11, trouble with "-fn -sony...." argument.  I think the "-f logfile"
  555.   option is causing problems.
  556.  
  557.     Changed to "-o logfile".  Sadly, "-o" *MUST* be handled before
  558.     the GUI initializes itself, so that we can log problems that
  559.     occur then.
  560.  
  561. / With no address := should report the total number of lines.
  562.  
  563. / In replacement text, \U and \L should affect literal text as well as
  564.   & and \1 ... \9.
  565.  
  566. ? :N, :previous, and :rewind don't work at the end of the args list.
  567.   Apparently they check the wrong end of the args list.
  568.  
  569.       Unable to reproduce this one.
  570.  
  571. / In "untar.c", the typedefs are apparently clashing with similar typedefs in
  572.   <stdio.h>, on some systems.  Change the names of those types in untar.c.
  573.  
  574. / Check the manual for typos!
  575.  
  576. / Need to add NEED_MEMMOVE, and use it for older SunOS.
  577.  
  578. / The "man" display mode doesn't handle long section names.  At the very least
  579.   it should truncate them!
  580.  
  581. / To compile elvis under Solaris2 with "cc" (not "gcc"), you need to add
  582.   "-Dconst=" to the value of the CC macro in Makefile.
  583.  
  584. * In WinElvis, the "windows" lptype is counter-intuitive.  It changes the
  585.   lplines and lpcolumn options to correspond to the font size and paper size.
  586.   This is the opposite from the "ps" and "ps2" lptypes, which change the
  587.   font size to squeeze lplines by lpcolumns characters on a page.
  588.  
  589. / The sesclose() function shouldn't attempt I/O on the session file unless
  590.   the session file has been successfully opened.  Currently, elvis can get
  591.   stuck in an endless loop giving fatal error messages if you set SESSIONPATH
  592.   to a bad value.
  593.  
  594. ? Sometimes crashes after running multiple external commands.  Particularly
  595.   noticible with :make, but I think it affects all external programs.
  596.   Reported under Linux.
  597.  
  598.     I used to be able to reproduce this easily, but now I can't.  Either
  599.     some other change fixed this or changed its symptoms, or I just forgot
  600.     how to reproduce it.
  601.  
  602. ? A core dump has been reported while entering a ":x" command.  The dump
  603.   apparently occurred inside the mapdo() function after most of the local
  604.   variables got scrambled.
  605.  
  606.     This may be a variation of the "crash after running an external
  607.     program" bug.  The :x command can save the file, and if the backup
  608.     option is set, then elvis runs "cp" or "copy", depending on the OS.
  609.  
  610.     In addition, a potential bug in the termcap interface was fixed.
  611.  
  612. * Some crashes/hangs have been reported under Linux.  These may have something
  613.   to do with <u> and <Shift-U> commands.  Usually there are no clues, but at
  614.   least twice the buffer filled with ^@ characters.  Reported by Steve Woodard,
  615.   woodard@kodakr.kodak.com
  616.  
  617.     I enabled assert() checking and allocation debugging, and played
  618.     around with those commands hundreds of times without being able to
  619.     reproduce it.  It may be compiler- or OS-dependent.
  620.  
  621.     1/20: It happened to me while I was just editing a plain old text file.
  622.     One of the numbered cut buffers' bufinfo blocks was recycled as a text
  623.     block, and that cause blkread to fail as it tried to find a bogus
  624.     blklist block.
  625.  
  626.     This happened to me again, shortly after a <Shift-U>.  Definitely a
  627.     problem there.  I've inspected the code though (bufundo() in buffer.c)
  628.     and it seems correct.
  629.  
  630. * The "ref" program doesn't understand compound tag addresses, such as
  631.     bar    foo.h    /^struct foo$/;/^ int bar;$/;"    struct:foo
  632.  
  633. * The "ref" program should be modified to support "./tags".  In fact, does
  634.   it even support "tags" (file name instead of directory name)?
  635.  
  636.     How can it support "./tags" when ref doesn't know which file you're
  637.     editing?  To do this right, I'd probably need to add a "-f fromfile"
  638.     option.
  639.  
  640. * The value of the blkcache option can have a *HUGE* effect on the speed of
  641.   elvis.  Why should a large cache be necessary?  A macro may crawl when
  642.   blkcache=150, and fly when blkcache=200.
  643.  
  644. * An ex search command (:/foo) doesn't highlight text when autoselect is true.
  645.   This is unfortunate, because the X11 [Search] button uses that command.
  646.  
  647. * Problems with the "ctags" program:
  648.   1) `extern "C"' seems to confuse it a lot.
  649.   2) It doesn't know that #defines can't be in a class.
  650.   3) A predeclaration of a class name (e.g., "class MyClass;") generates a
  651.      tag but shouldn't.
  652.   4) Bodies of class declarations aren't scanned but should be (with all
  653.      generated tags being declared as being in that class).
  654.      And could enum values maybe be detected as part of the same fix?
  655.   5) C++ destructors (e.g., ~MyClass(void)) aren't found.
  656.  
  657. * Modify "elvis.ps" to sense the paper size automatically.  Replace "lppaper"
  658.   with a list of driver-specific options; for PS, this should include frame,
  659.   bar, punch, clipboard, font, and tray.  (The frame, bar, and punch options
  660.   are already implemented, but you need to edit elvis.ps to change them.)
  661.  
  662. * Under X11, if you replace the controlfont with another of the same height,
  663.   elvis doesn't redraw the toolbar.  Labels don't fit in the buttons anymore!
  664.  
  665. * Under X11, if a dialog has a locked field which is wider than a normal string
  666.   field, it is shifted.  This is bad, because locked fields have no cursor so
  667.   there is no way to shift it back again.  Also, the overall dialog width is
  668.   chosen with the assumption that the whole locked field is visible.
  669.  
  670. * Problem: The "squid" HTTP proxy, when handling an FTP request to read a
  671.   directory, returns an HTML document similar to Elvis' own format, but
  672.   it uses relative file names in a weird way.  I suspect squid's method is
  673.   incompatible with that used in "index.html" files on some FTP sites
  674.   such as ftp://sunsite.unc.edu/pub/Linux/!INDEX.html, so this is probably
  675.   really a squid bug, but I need to check.
  676.  
  677. / Some FTP servers make non-existent files look like directories.
  678.   Specifically, the SIZE command returns "550-Argument is not a plain file".
  679.   Need a better way to detect non-existent files.
  680.  
  681. / If the cursor is past the end of the buffer, then it looks weird.  This
  682.   could be fixed by adding a "virtual" newline to the end of a file which
  683.   doesn't end with a real one.
  684.  
  685. * If you use the scrollbar to scroll to the bottom of a large file in html,
  686.   man, or hex mode, then when you reach the very end of the file (where you
  687.   would expect see no part of the file, just ~'s) it jumps back so the window
  688.   is completely filled with lines from the file.
  689.  
  690. * The "hex" display mode does strange things to 0x0a characters.  Those quirks
  691.   are hard to eliminate, because that's the newline character and several
  692.   commands are sensitive to newlines.  But eventually something should be done.
  693.  
  694. * In the "syntax" display mode, if a multi-line comment ends on the last
  695.   character of the line just above the top of the window, and the comment
  696.   ender string is one character long (which happens in Pascal, but not C),
  697.   then elvis assumes that the top line of the window is a continuation of
  698.   that comment.
  699.  
  700. * Ex command-line history is very weird.  If you recall an earlier command
  701.   and edit it, you're actually editing the historic version.  I would prefer
  702.   to have a new copy of that line created at the end of the history buffer,
  703.   and have the editing take place on that new copy.
  704.  
  705.   The same thing happens with regular-expression history, and filter-program
  706.   history.
  707.  
  708. * elvis's prompt cannot be answered from a keyboard map, an
  709.   example (simplified and therefore useless):
  710.  
  711.           :map #1 :!more %^M^M
  712.  
  713.   the second ^M should answer elvis's prompt, that occurs after
  714.   the shell escape, automatically (only for convenience, because
  715.   `more' has its own prompt), but this doesn't work: I have to
  716.   press <Return> manually - but then elvis recognizes the ^M - and
  717.   moves the cursor one line down (to my surprise: if I map a
  718.   single character to any key I can use this key to answer the
  719.   prompt!)
  720.  
  721. * In the installation routine, create links named "vi", "ex", and "view".
  722.   Similarly, supply .BAT files or something for Win32.
  723.  
  724. * Some problems have been reported while trying to recover files.  Either
  725.   there's a bug, or I need to improve the documentation.
  726.  
  727. * Ctags doesn't produce "Mfilename" tags for main() functions in filename.c
  728.  
  729. * Sometimes text changes as you move the cursor over it in HTML mode.  This
  730.   has also been reported in Hex mode, but I wasn't able to reproduce that, and
  731.   it could easily have been a configuration problem anyway. (:set nonascii=...)
  732.  
  733. -------------------------------------------------------------------------------
  734. ? Under X11, elvis was reported to get stuck in a loop while trying to step
  735.   through the toolbar buttons in the x_tb_predict() function.
  736.  
  737.     It looks like there was only one button in the toolbar, and the
  738.     buttons are organized in a circular list.  They shouldn't be a
  739.     circular list!  How could that happen?
  740.  
  741.     This may have some indirect relationship to the way that the default
  742.     geometry is parsed.  The system where this was reported had a
  743.     geometry string that looked like "80x25+130" -- with no "+Y" value.
  744.  
  745. ? Trouble decoding URL-encoded addresses?  Compare elvis' code to that of
  746.   VFY.  Also compare the osnet.c file to the VFY's code.
  747.  
  748. ? Sometimes the X11 interface refuses to give up keyboard focus.  I've seen
  749.   this *VERY RARELY* with FVWM under Linux.  It has also been reported under
  750.   OLVWM, and is supposed to be very common under TWM.  I suspect there is a
  751.   race condition, perhaps because elvis (or something else?) isn't including
  752.   a timestamp on a request?
  753.  
  754.     Hopefully this was a side-effect of the bug which caused elvis to
  755.     request an invalid window size (width != basewidth + integer * inc).
  756.     That bug caused elvis and the window manager to fight about window
  757.     sizes (and thus burn a lot of CPU cycles!) which may have lead the
  758.     window manager to treat elvis windows differently.
  759.  
  760. ? Does elvis handle ^M in macros differently than the standard vi?
  761.  
  762.     MS-DOS handles them differently than the standard Unix.  I suspect
  763.     that's the main problem.  Elvis should try to avoid dependencies
  764.     like that, though; perhaps ":source" should always read ex scripts
  765.     in "unix" mode?
  766.  
  767. ? In the Win32/console version, the handling of the "dead" keys (^, ' and `)
  768.   is wrong, they produce three characters, for instance ^<space> inserts #)^
  769.  
  770. / the read command omits the message 'read x lines' in some
  771.   circumstances, one case that I can reproduce:
  772.  
  773.   call elvis for a new (empty) file, then do
  774.  
  775.       :r !echo "abc\ndef"
  776.   twice
  777.  
  778.       I couldnt reproduce this here.  Hopefully that means it is fixed,
  779.       but I doubt it.
  780.  
  781. / In lib/elvis.bwf, the Win32 copy command doesn't like the ">NUL".
  782.  
  783.     Unable to verify this bug; it works for me.  I have made a few small
  784.     changes to osprg.c, but as far as I can tell, it should also have
  785.     worked before those changes.  From the description of this bug, it
  786.     sounds like ">NUL" was being passed to COPY.EXE as an argument.
  787.  
  788. / A URL with empty parameters ("http://localhost/sample.html?") has been
  789.   reported to cause core dumps.  I was unable to reproduce this myself.
  790.   It is possible that some other change that I made to the code has fixed
  791.   this.
  792.  
  793.     Could not reproduce this.
  794.  
  795. / Elvis got hung on a slow machine running X11.  The cursor continued to blink,
  796.   but elvis didn't respond to any events, including Expose or KeyPress events.
  797.  
  798.     Unable to reproduce this.
  799.  
  800. / These commands, taken from elvis.brf, cause a trap under NT:
  801.   > I suppose you could make "elvis.brf" check the file's write permissions,
  802.   > and check it out if it is read-only.  The following UNTESTED lines should
  803.   > do the job:
  804.   > 
  805.   >         if dirperm(filename) == "readonly"
  806.   >         then !co -l %
  807.   >         if dirperm(filename) == "readwrite"
  808.   >         then set noreadonly
  809.  
  810.     Worked for me.  (Actually, I used "then !attr -r %" since I don't
  811.     have RCS for Win32.)
  812.  
  813. / The NT console port throws away any characters that the user types into
  814.   the console window before elvis creates its own console buffer.  Ideally
  815.   it shouldn't do that.
  816.  
  817.     I don't think it does.  It can be hard to tell, since (on my NT system
  818.     at least) elvis creates its console buffer after only a second or so.
  819.     But it looks like it works, and if the SetConsoleMode() functions do
  820.     clobber the typeahead buffer, I'm not sure how to tell it not to do
  821.     that.
  822.  
  823. / A long (>255 chars) error message from a compiler caused elvis to dump core.
  824.   This was while running :make, of course.
  825.  
  826.     There's no obvious reason for this to happen.  All of the buffers for
  827.     holding parsed parts of the error message are dynamically allocated
  828.     and grow when necessary.  Perhaps the msg() command caused calc.c's
  829.     buffer to overflow?
  830.  
  831.     This was actually reported for 2.0, not 2.1.  I was able to reproduce
  832.     it under 2.0 but not 2.1, so I'll assume it was fixed somewhere along
  833.     the way.
  834.  
  835. -------------------------------------------------------------------------------
  836. / Change version to "2.1i-beta".
  837.  
  838. / The "-b blksize" option doesn't verify that the requested size is a power
  839.   of 2.  It must!
  840.  
  841. / The command "elvis -Gquit -cq -b16384" causes a core dump.
  842.  
  843.     Actually, anything that generated a non-fatal, non-status message
  844.     was causing core dumps when elvis was invoked with the "quit" or
  845.     "script" user interfaces.
  846.  
  847. / It would be nice if regexp character classes allowed extra characters after
  848.   the :alnum: or whatever.  E.g., /[:alpha:_][:alnum:_]*/ find C identifiers.
  849.   MORE IMPORTANTLY, did I really implement the right syntax?  The POSIX specs
  850.   could be interpretted as meaning that you need an extra set of brackets
  851.   around the named classes.
  852.  
  853.     Apparently POSIX does require an extra set of brackets, as in
  854.     /[[:alpha:]_][[:alnum:]_]*/ for matching C identifiers.  I've changed
  855.     elvis' regexp code, and the lib/elvisre.html documentation file.
  856.  
  857. / The visual / command doesn't allow / in a character class.  In fact, it
  858.   appears that *all* regular expression parsing code has this problem:
  859.   ex addresses, and :g/:v/:s commands.  Tags may also have this problem,
  860.   but since tag addresses never use character classes it is a moot point.
  861.  
  862. / Winelvis' "About" box should show the version number of the VERSION macro,
  863.   or the o_version option.  (They're the same.)  In 2.1h and earlier, it is
  864.   just hardcoded to show "2.1".
  865.  
  866. / All aliases seem to be enclosed in curlies, even the ones which were really
  867.   defined on a single line.  Since the presence of curlies affects the way
  868.   arguments are handled, this is a problem.  Apparently arguments are appended
  869.   on the *following* line, so they look like a separate command.
  870.  
  871. / Added OS/2 port to general distribution.
  872.  
  873. / Describe blksize in the manual.  Mention that it can only be set via -b#
  874.   and explain why.
  875.  
  876. / The manual entry for MS-DOS (9.1) states incorrectly that you can change
  877.   the blksize option in a configuration file.
  878.  
  879. / The manual needs to say more about filenames: wildcards, %, #, \, $env,
  880.   (expr), ~, {a,b}, `command`.
  881.  
  882. / Typo in manual: "altername" should be "alternate".
  883.  
  884. / In elvisinp.html, ^R/^L get confused about the terms "window" & "screen".
  885.  
  886. / In elvis.syn, MS-DOS file names should accept uppercase extensions as well
  887.   as lowercase.  E.g., .BAT and .bat.
  888.  
  889. / Make the X11 version check for WINDOWID *or* one of the known TERM values.
  890.  
  891. / 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
  892.   variables but getenv() is case-sensitive.  It could also be construed to be
  893.   more CSH-like, which is probably a good thing.
  894.  
  895. / How about a command-line option for redirecting stderr (and maybe stdout?)
  896.   to a log file?  This would provide an easy-to-document means by which
  897.   Windows95 users can store error messages.
  898.  
  899. / The manual entry for "elvis.ses" still tries to use the old "binary" option.
  900.  
  901. / If the "backup" option is set, :wq can cause a core dump at guitcap.c:1547
  902.  
  903. / Tag searches on operators don't work?  E.g., if you double-click on <<
  904.   in a C++ program, it should search for the tag "operator<<" but instead it
  905.   just fails.
  906.  
  907. -------------------------------------------------------------------------------
  908. / Change version number to "2.1h-beta".
  909.  
  910. / For MS-DOS, the ^C key doesn't interupt macros, or long commands.  This is
  911.   apparently due to the fact that MS-DOS only checks for ^C during a few
  912.   specific system calls, and elvis doesn't use those calls when it is busy
  913.   executing commands.
  914.  
  915.     I fixed this by adding a bogus kbhit() call to the ttypoll() function.
  916.  
  917. / The :a, :c, and :i commands are dropping the newline from the last line of
  918.   multi-line text.
  919.  
  920. / For X11, the XGetInputFocus() function now returns void instead of a success
  921.   indicator.  Need to modify guix11/guix11.c
  922.  
  923. / The sigaction() calls should not use sa_restorer, because it is deprecated.
  924.  
  925. / The [charlist] notation in regular expressions doesn't allow ] to be included
  926.   in a regexp.  It should be allowed as the first character, or after an initial
  927.   ^ character for negating the list, or after a - as the end of a range.  Also
  928.   need to document this.
  929.  
  930. / In osunix/osnet.c, the function netread() tries to return -1 to indicate
  931.   an error.  It should return False.
  932.  
  933. / Problems remain with terminals that support dim text but not bright text.
  934.   md/me/mh termcap attributes.
  935.  
  936. / The backslash changes for aliases seems to have broken backslash handling
  937.   for commands like...
  938.  
  939.       g/foo/a\
  940.       one\
  941.       two
  942.  
  943.   ... which now adds an extra blank line.  Probably the :append command should
  944.   be modified to expect a newline after the last line, and the normal '.'
  945.   marker should ensure that the last added line ends with a newline.
  946.  
  947. / In ex mode if you hit <Enter> at the end of a file, elvis should give a
  948.   better error message than "bad delta".
  949.  
  950. / In guiwin32/gwmsg.c, the gwclient_WM_DROPFILES() function needs to quote
  951.   the dangerous characters (such as space) in the filename.
  952.  
  953. / The X11 interface can get stuck in a loop in which it continually resizes
  954.   the window.  Apparently if there are two or more resize requests in the
  955.   queue, and elvis adjusts itself for the first one, then the others will
  956.   can change it to still another size.  This has been reported under TWM
  957.   after a simple resize action.
  958.  
  959.     A somewhat sleazy way to reproduce this: Start elvis.  From within
  960.     elvis, start xkoules.  While elvis is waiting for xkoules to exit,
  961.     resize the elvis window *twice*.  Exit xkoules.
  962.  
  963.     Possible fix: When elvis gets one configure request, it can try to
  964.     read as many more as possible, and only use the last one.
  965.  
  966. ? Problems with German keyboards under X11.  The modifiers don't appear to
  967.   work correctly, which prevents { } [ ] ~ @ \ | from being enterable.
  968.   Reported by Juergen Preuss (preuss@cach02.chm.tu-dresden.de).
  969.  
  970.     I borrowed some code from RXVT, which had borrowed it from XTerm.
  971.     Hopefully this will solve the problem.  It doesn't seem to have
  972.     broken anything for US keyboards, but that's all I can test myself.
  973.  
  974. / ctags can't handle derived classes: "class foo: public bar {...}" should
  975.   generate an entry for "foo" and ignore "bar".
  976.  
  977. / The "tags" option needs to support a notation for "look in the directory of
  978.   the current file".  Vim uses "./tags" for that.
  979.  
  980. / After a <L command, I got the message "15 lines NULLed".
  981.  
  982. / Some problems with the manual: The use of multiple -V flags should be
  983.   explained somewhere.  The missing features of the DOS port should be
  984.   writ large.
  985.  
  986. / The "version" option isn't being initialized correctly.
  987.  
  988. / Add a dummy "redraw" option.  Or maybe a real one.
  989.  
  990. / Change the html entry in "elvis.syn" to include more tags.
  991.  
  992. / When the "number" option is set, clicking the mouse sets the preferred
  993.   column to the wrong value; If you click and then hit j/k, the cursor
  994.   jumps to a different column.
  995.  
  996. / A crash was reported in the TeX mode.  Overflowed a token, perhaps?
  997.  
  998.     Perhaps; the token-getting function wasn't smart enough to handle
  999.     long comments or expressions.  It should be that smart now.
  1000.  
  1001. / The online manual title says "elvis 2.0" -- change to "2.1".  Also, I saw
  1002.   a reference to "14.x" which should actually read "16.x"
  1003.  
  1004. / The "Tips" chapter of the manual should have a section on how to make elvis
  1005.   run faster.
  1006.  
  1007. -------------------------------------------------------------------------------
  1008. / Change version number to "2.1g-beta".
  1009.  
  1010. / Consistent crashes have been reported under Linux in the lp() function
  1011.   when elvis is compiled with gcc -O2, with ELF binaries.  Unfortunately, it
  1012.   works correctly when compiled with gcc -g, so we can't narrow it down any
  1013.   more than that.  Reported by William Cheung, wcheung@scc.spiralcomm.com
  1014.  
  1015. / In text-mode Win32, there are freaky problems reading from a program. 
  1016.   Just running a program works; filtering works; reading from a text-mode
  1017.   win32 executable such as ls.exe works.  Reading from anything else
  1018.   generally causes the output to show on your screen but not be inserted
  1019.   into the edit buffer.
  1020.  
  1021.     Got pipes working under Win95 in text mode, but not graphic mode.
  1022.     Would like to have pipes under graphic mode (WinElvis).
  1023.  
  1024. / Add the ability to run an external tag search program.  A new "tagprg"
  1025.   options will be invoked, and its stdout will be parsed as a series of
  1026.   tag lines, all of which are assumed to match the requested tag.
  1027.   If tagprg is undefined, then use the standard built-in tag searches.
  1028.  
  1029. / Both "windows" and "x11" have a scrollbar option, but they work differently.
  1030.   Should probably rename the x11 option to "xscrollbar".
  1031.  
  1032. / Temp files tend to accumulate under Win32.  Problem in oswin32/osprg.c?
  1033.  
  1034. / Rapid left-arrow while in input mode causes characters to be lost.  This
  1035.   only seems to show up in Win32 text-mode.
  1036.  
  1037.     This was fixed once before, I thought, in input.c:cleanup().
  1038.     I suspect new ctrl_o code in inputchange() is to blame for its
  1039.     reappearance.
  1040.  
  1041. / Using backslashes for multi-line commands doesn't seem to work right.
  1042.   It looks like there's no terminating '\0'.
  1043.  
  1044. / In WinElvis, the toolbar and scrollbar options don't quite work -- you can
  1045.   apparently turn them off, but you can't turn them back on again.
  1046.  
  1047. / The names of the "windows" font options conflict with the "x11" options.
  1048.   This is a problem because both sets of names appear in the elvisopt.html
  1049.   file, and :help needs to be able to find the right one.
  1050.  
  1051.     Changed the names of the "windows" options from normalfont, boldfont,
  1052.     etc., to normalstyle, boldstyle, etc.  This makes more sense anyway,
  1053.     since their values aren't really font names.
  1054.  
  1055. / ":w>>file" doesn't set the alternate file name correctly.  Also, the
  1056.   >>file notation doesn't seem to *create* a file if it doesn't exist;
  1057.   it should.
  1058.  
  1059. / The :set command doesn't permit trailing spaces.  It should.
  1060.  
  1061. / Need to find a way to nest the { ... } notation.
  1062.  
  1063. / The following should be undoable in a single step: @x macros, :map macros,
  1064.   :@x macros, :ab abbreviations, aliases, and :g/:v commands (which are already
  1065.   undoable as a single step).
  1066.  
  1067.     One possible way to do this: make bufwilldo() check the eventcounter,
  1068.     and do nothing if it hasn't changed since the previous bufwilldo().
  1069.  
  1070. / Under X11, toolbar labels should accept characters which aren't defined
  1071.   as meaning something else -- namely :"=?~ -- and trailing spaces should be
  1072.   ignored.
  1073.  
  1074. / Aliases should not affect the behavior of the exthenflag variable.
  1075.  
  1076. / Add :while and :do commands.  The while expression should be saved
  1077.   wherever the exthenflag flag is saved.
  1078.  
  1079. / The htmlescape() function in dmmarkup.c is reported to cause core dumps
  1080.   on an RS6000 running AIX, when compiled with optimization enabled.  If
  1081.   compiled for debugging, it doesn't dump core so specifics are hard to
  1082.   come by on this one.
  1083.  
  1084. / Under MS-DOS, elvis seems to write each character twice.  This was reported
  1085.   by a blind user who has a text-to-speech device hooked into his console.
  1086.  
  1087.     It doesn't do this with the termcap interface under Linux.  I suspect
  1088.     that it is having a hard time because the attribute and character
  1089.     bytes are written out seperately.
  1090.  
  1091. / Large :copy commands can get screwed up.  Try editing a large file, such
  1092.   as ex.c, and insert line numbers at the start of each line ("%!cat -n").
  1093.   Then do a ":100,500co1000" command.
  1094.  
  1095. / Sometimes keywords from elvis.syn are lost?  Saw some PERL code where
  1096.   "if" and "while" weren't in boldface.  The large number of PERL keywords
  1097.   may be a factor.
  1098.  
  1099.     Yes, that was it.  There was a silent limit of 256 keywords.  I have
  1100.     now increased that limit to 300 keywords.  I really need to recode
  1101.     the keyword hash table though -- it is unnecessarily kludgy.
  1102.  
  1103. / X11 dialogs should support a "locked" data type, because some options can't
  1104.   be edited.  If a row doesn't specify an option name, then that row's type
  1105.   should be "locked"; this will allow dialogs to display immutable information
  1106.   which doesn't come from an option.  If a row has neither an option nor a
  1107.   value, then its label should be centered in the dialog.
  1108.  
  1109. / Under MSDOS with TERM=dosansi or TERM=nansi, mouse highlighting is
  1110.   flakey, and linewrap causes some problems.  Also, running an external
  1111.   command causes the mouse cursor to vanish.
  1112.  
  1113. / Should allow certain words to be customized by language:  Submit, Cancel,
  1114.   Help, True, False.  Create options named "true" and "false" for storing
  1115.   the local versions of those words; this will also have the pleasant side
  1116.   effect of allowing the english words "true" and "false" to be used as
  1117.   though they were Boolean literals in expressions.  The other words are
  1118.   only used by the "x11" user interface.
  1119.  
  1120. / The saveregexp option doesn't do enough.  It protects the regexp, but
  1121.   it needs to protect the substitution text and the substitution flags too.
  1122.  
  1123. / Need to replace <xmp></xmp> with <pre></pre> in the lib/*.html files.
  1124.   <xmp> is obsolete, and elvis doesn't implement it correctly anyway.
  1125.   Also add <code> to dmmarkup.c, as a synonym for <tt>, and use <code>
  1126.   in the lib/*.html files.
  1127.  
  1128. / The :w command affects the value of the "exthenflag" flag.  The elvis.bwf
  1129.   and elvis.awf scripts (and others) should probably save the value of
  1130.   exthenflag, and restore it afterward.
  1131.  
  1132. / In a :ab! abbreviation, expansion doesn't take place if the short form
  1133.   is the last thing on a command line.
  1134.  
  1135. / Under Win32, it should be able to parse UNC names (\\machine\directory\file)
  1136.  
  1137.     Apparently the only missing piece is that elvis should not change
  1138.     the leading \\ to \.
  1139.  
  1140. / The termcap interface can't use "dim" unless there is also a "bold" escape
  1141.   sequence.  There's no need for that!
  1142.  
  1143. / The :ta command doesn't offer any way to supply values which contain
  1144.   colons or whitespace.
  1145.  
  1146. / Long moves don't necessarily center the cursor line in the window.  See
  1147.   the "!!!" comment in dmnormal.c.  To fix this, I'll need to pass the
  1148.   window pointer into the setup function.  (Some other setup functions could
  1149.   benefit from this, too.)
  1150.  
  1151. / The :ta command should be smarter about setting the previoustag option.
  1152.   Whenever you jump to a tag, previoustag should be set to the name of that
  1153.   tag.
  1154.  
  1155. / Add a Windows version of the "quit" GUI to WinElvis.  The normal "quit"
  1156.   interface isn't supported there, and the text-mode version of elvis doesn't
  1157.   support "lptype=windows".
  1158.  
  1159. / When ^L is defined as forcing a redraw in input mode, it can break some
  1160.   common macros.  Perhaps it should be left as a normal "insert me" character.
  1161.   Users could still redraw the screen while in input mode by typing ^O^L.
  1162.  
  1163. / Bottom button of X11 scrollbar isn't drawn initially.  It appears after
  1164.   an expose event, or after any colon command including colon-backspace.
  1165.   I suspect the scrollbar is first drawn with a height of 0, and the top
  1166.   button is drawn over the top of the bottom button.
  1167.  
  1168. / On AIX systems, the toolbar is drawn incorrectly.
  1169.  
  1170. / Control-V should display a carat on the screen, while waiting for the
  1171.   quoted character.
  1172.  
  1173. --------------------------------------------------------------------------------
  1174. / Change version number in version.h to "2.1f-alpha".  (n.b. I haven't been
  1175.   doing a consistent job of updating this list as bugs are fixed, or as new
  1176.   versions are uploaded.  There *were* some fixes between 2.1b and 2.1f.)
  1177.  
  1178. / An expose event causes the scrollbar to be redrawn, even if it should really
  1179.   be blanked out (because the cursor is on the bottom row).
  1180.  
  1181. / Under Win32 or DOS, text-mode "elvis -?" outputs a line of garbage after
  1182.   the help message.  The garbage consists of uninterpretted escape sequences,
  1183.   emitted as the termcap interface shuts itself down.
  1184.  
  1185. / When invoked in the current directory, with the "exrc" option set, elvis
  1186.   will source the ./.exrc file twice.
  1187.  
  1188. / Abbreviations can get stuck in a loop.  Self-referential abbreviations
  1189.   should be disallowed.  (Actually, should an abbreviation *ever* expand
  1190.   another embedded abbreviation?)
  1191.  
  1192. / The :& command doesn't seem to be working correctly in all circumstances.
  1193.   After doing a ":%s/.$" on one buffer, and then switching to another buffer,
  1194.   the command ":%&" did not work.
  1195.  
  1196.     This is because the "elvis.arf" file uses a :s command to locate and
  1197.     execute modelines.  There is no easy way to fix this, unless you think
  1198.     ":set nomodelines" is an acceptable solution.
  1199.  
  1200.     Here's an idea: Create a new "saveregexp" option.  Leave it on
  1201.     normally, but turn it off when doing the modeline search.  Also force
  1202.     it off while searching for tags for the "showtag" option.
  1203.  
  1204. / The command ":g/old/s//new/g" doesn't work in 2.1e.  It worked in 2.0, so
  1205.   some recent change must have broken it.
  1206.  
  1207. / When returning after a :bb command, the cursor is moved to the top of the
  1208.   buffer instead of its previous position.  The best way to fix this would
  1209.   be to add a "winpos" field to the BUFFER struct, and set it to the cursor
  1210.   position before each ^W command or ex command.
  1211.  
  1212. / The X11 interface doesn't handle Expose events during time-consuming
  1213.   commands such as :make.
  1214.  
  1215. / If bufdisplay is set to "man", "html", or "tex", then ^Wd should probably
  1216.   toggle between "syntax" and bufdisplay, rather than "normal" and bufdisplay,
  1217.   so the source text will be displayed with syntax coloring.
  1218.  
  1219. / In ioopen(), the usestdio flag is never turned off.
  1220.  
  1221. / The :make command is insensitive to the gui->poll function.
  1222.  
  1223.     It does set the pollfrequency option to 1 while it is running, but
  1224.     I think maybe it also needs to call the guipoll() function to reset
  1225.     its internal count-down.
  1226.  
  1227.     Update: It does detect it, but not until the next line comes in from
  1228.     the compiler.  This can take a while.
  1229.  
  1230. / The :g and :v commands don't work correctly on last line.  If the last line
  1231.   is supposed to be affected, it appears to actually affect the *FIRST* line.
  1232.  
  1233.     The behavior of this bug is more complex than that, actually.  More
  1234.     testing is needed.
  1235.  
  1236. / The :s command doesn't handle counts correctly.  It should treat a count as
  1237.   a quantity of lines, but instead it treats it as a selector for the instance
  1238.   of matching text to change in each line.
  1239.  
  1240. / In the "x11" interface, the tool buttons should wait until the mouse button
  1241.   is released.  Otherwise the "quit" button could leave the mouse pointing at
  1242.   some totally unrelated window WITH A BUTTON PRESSED!  Surprise!
  1243.  
  1244. / If the "number" option is set, then the printout should show line numbers.
  1245.   It should also cause page headers to be printed.
  1246.  
  1247. / Often it would be handy to allow ":e !command" or ":sp !command" to fill an
  1248.   untitled buffer from a filter command.  For example, ":sp !man \@ | col -b"
  1249.   would cause a window to pop-up, showing the man-page for the word under the
  1250.   cursor.
  1251.  
  1252. / In the syntax display mode, the directory in which the current file resides
  1253.   should assumed to be in the search path.  For example, if you're editing
  1254.   osunix/tcaphelp.c, and you double-click on "tcaposix.h", then elvis should
  1255.   be smart enough to load osunix/tcaposix.h.  Currently it isn't.
  1256.  
  1257. / The assert() statement in ex_qall() needs "|| xinf->command==EX_ONLY".
  1258.  
  1259. / If the backspace key sends ^? (and the tty settings indicate this) then
  1260.   elvis should treat ^? as ^H.
  1261.  
  1262. / It would be nice if elvis supported HTML frames, in the least-complex
  1263.   manner possible: Treat <FRAME SRC=... ALT=...> like <A HREF=...>...</A>
  1264.  
  1265.   Similarly, it would be nice if an <IMG> which isn't an hypertext reference
  1266.   would fetch the image data (perhaps reading it into a temporary edit buffer)
  1267.   and then send it to a configurable program; the default should be "xv -"
  1268.   so the image is displayed by xv.
  1269.  
  1270. / If ":make" is used in a window which is displaying an internal buffer
  1271.   (especially the "Elvis error list" buffer), and there is another window
  1272.   which is displaying a non-internal buffer, then the command should be run
  1273.   in that other window.  This is simply for convenience -- after going to the
  1274.   trouble of displaying an internal buffer in a window, the user probably
  1275.   doesn't want to use that same window to show a buggy source file.
  1276.  
  1277. / Some older X-windows servers don't have XrmCombineFileDatabase().
  1278.  
  1279. / If you are displaying a cut buffer in a window, then you can try to yank
  1280.   text from a cut buffer into itself... but cutyank() isn't smart enough to
  1281.   handle that correctly; elvis hangs.  Probably cut buffers should be locked.
  1282.  
  1283. / The :pop command should wipe out the list of matching tags.  This will
  1284.   allow elvis's enhanced tags to act more like traditional tags for users
  1285.   who are in the habit of using ^]^T to glance at the definition of a tag.
  1286.  
  1287. / The X11 resource "*foreground: somecolor" makes toolbar buttons unreadable.
  1288.  
  1289. / The install procedure should copy lib/elvis.xpm and lib/elvis.xbm into the
  1290.   /usr/include/X11/{pix,bit}map directories.  Also, small icons would be nice
  1291.   (pixmaps of size next/normal=56x46, small=21x18, and mini=17x14)
  1292.  
  1293. / The "Delete Window" button of the last elvis window should not simply fail;
  1294.   it should do a ":close" command instead.
  1295.  
  1296. / In the "html" display mode, if a token begins with   then elvis
  1297.   mistakes the token for a whitespace token; the remaining characters aren't
  1298.   displayed.
  1299.  
  1300. / The x, X, ~, and r commands don't work correctly when the count exceeds
  1301.   the number of characters in the line.  They should implicitly reduce the
  1302.   count; but instead they're just ignoring the command.
  1303.  
  1304.     Actually, r and X are supposed to fail, and they do.
  1305.     x should fail, but elvis just deleted to left.  Now it fails correctly.
  1306.     ~ should reduce the count.  It didn't before, but it does now.
  1307.  
  1308. / The character search commands stop at a newline, even if the current display
  1309.   mode uses some other definition of a "line".
  1310.  
  1311. / The X11 interface should handle GraphicsExpose events when scrolling a
  1312.   window which is partially obscured.
  1313.  
  1314. / Add support for hardtabs/ht option.  And then ignore it, since elvis never
  1315.   outputs hard tabs.
  1316.  
  1317. / The "flash" option doesn't work.
  1318.  
  1319. / The current("word") function sometimes causes a core dump.  This occurs when
  1320.   the cursor isn't located on a word (but sometimes that works too).
  1321.  
  1322. / Elvis uses an option named "buffers", but that clashes with a variable
  1323.   declared in some systems' <stdio.h> file.  Change to "elvis_buffers".
  1324.  
  1325. / Elvis checks for :mh=: even if :me=: is undefined.  It shouldn't.
  1326.  
  1327. / Under NT, in the GUI version, the Options/Syntax menu item brings up
  1328.   Dr. Watson.
  1329.  
  1330. / Cut/Paste don't work in Win32/gui?
  1331.  
  1332.     Verified.  A true bug.  It attempts to cut/paste whole lines (?) via
  1333.     the ">/"< buffer, but the underlying GUI clipboard functions don't
  1334.     seem to work.
  1335.  
  1336. / Win32: There is a limit to how small a window can be: 2 rows of 30 characters.
  1337.   Resizing the screen to be smaller than that (by dragging an edge/corner of
  1338.   the window frame) causes elvis to crash.
  1339.  
  1340. / Win32: If you use a mouse click to position the cursor, and you jiggle
  1341.   the mouse slightly, then WinElvis starts highlighting text.  Xelvis is less
  1342.   sensitive to jiggles; it requires you to drag the mouse into a different
  1343.   character cell before it'll start highlighting, which seems to work well.
  1344.  
  1345. --------------------------------------------------------------------------------
  1346. / Change version number in version.h to "2.1b-alpha"
  1347.  
  1348. / The X icons still say "2.0", even though we're working on 2.1 now.
  1349.  
  1350. / Some commands move the cursor to a different buffer when they shouldn't.
  1351.   For example, ":(otherbuf)1,20co." copies the lines correctly, but then it
  1352.   moves the cursor to line 20 of otherbuf.
  1353.  
  1354. / The "x11" interface should ignore MotionNotify except after a ButtonPress.
  1355.   Although elvis only requests MotionNotify events while a button is held down,
  1356.   some servers send them at other times as well.
  1357.  
  1358. / Ex parser doesn't support backslashes, for things like...
  1359.  
  1360.     :g/XXX/a\
  1361.     line1\
  1362.     line2
  1363.  
  1364. / Under X, pasting from the clipboard doesn't work during, e.g., a "5s"
  1365.   command.  (Probably true of Win32 gui, too.)
  1366.  
  1367. / Environment variables with underscores are not recognized in elvis scripts.
  1368.  
  1369. / A more sophisticated method for handling EOF would be appreciated.
  1370.   Suggestion:
  1371.       * Add a "readeol" option to each buffer, one of {unix, dos, mac, text,
  1372.         binary}, defaults to "text".
  1373.       * Add a "writeeol" option to each buffer, one of {unix, dos, mac, text,
  1374.         binary, same}, defaults to "same".
  1375.       * Add a "fileeol(filename)" function, returns the file's probable
  1376.         format, one of {unix, dos, mac, text, binary} by reading the first
  1377.         part of a file.  Returns "text" if no hard evidence of any other
  1378.         format.
  1379.     * Meanings of values: unix=LF, dos=CRLF, mac=CR, text=local convention,
  1380.       binary=no modifications, same=current value of readeol.
  1381.     * The "elvis.brf" file could do a "let readeol=fileeol(filename)"
  1382.       to detect non-text files automatically.
  1383.  
  1384. / Need a way to prevent :make from loading an erroneous BINARY file.
  1385.  
  1386. / The built-in calculator can easily overflow when fetching the value of an
  1387.   environment variable.  Possibly other situations, too.
  1388.  
  1389. / Under Unixware, when the termcap interface writes a '\n' character, the
  1390.   cursor is forced to column 0.  Should use :do=: or :DO=: instead.
  1391.  
  1392. / ":q!" doesn't turn off a buffer's "modified" flag or delete the buffer.
  1393.  
  1394. / The guitcap file never checks the LINES and COLUMNS environment variables.
  1395.  
  1396. / When entering a command line, ^Ocw places a $ as though it will replace
  1397.   the current word, but actually any text is inserted.
  1398.  
  1399. / The "program" option isn't documented.
  1400.  
  1401. / Under X11, some sites are missing the default fonts, or have goofy fonts
  1402.   aliased to "fixed" and "variable".  Probably appdefaults fix this for other
  1403.   applications.  Elvis should support some method of reading X resources.
  1404.  
  1405. / It would be nice if untar.c kept the date and permissions from the archive.
  1406.   This can't be done in ANSI C, but if POSIX calls are supported then it can
  1407.   be.  Maybe check for _POSIX_SOURCE?  Also, it would be nice if the untar
  1408.   executable could be prepended to the archive, to produce a self-extracting
  1409.   archive.
  1410.  
  1411. / Add a way to abbreviate (Elvis error list) and (Elvis map log).
  1412.  
  1413.     Done: You can now give use a quote character followed by the initials
  1414.     of any buffer in place of the buffer name.  So ("Eel) means the same
  1415.     as (Elvis error list).
  1416.  
  1417. / The "warningbells" and "warpback" options are both abbreviated "wb".  Change
  1418.   "warpback" to "xwb".
  1419.  
  1420. / The termcap gui should not attempt to catch SIGHUP.  It isn't necessary,
  1421.   and catching it can, in fact, cause the elvis process to go into a tight
  1422.   loop as it attempts to read from a dead tty.
  1423.  
  1424. / Add ^Wo and :only commands -- like :qall except they only close (don't
  1425.   delete buffers) and don't affect the current window.
  1426.  
  1427. / Maybe add a "showname" option, to display the buffer name on the status
  1428.   line?
  1429.  
  1430. / The console's "Edit/Paste" menu item doesn't paste all of the characters
  1431.   that it should.  (Also, it doesn't work correctly for Chinese text... but
  1432.   that may be too big a problem for now.)
  1433.  
  1434. / The manual should mention that "ignorecase" doesn't affect character classes.
  1435.  
  1436. / The status line isn't redrawn when colors change.
  1437.  
  1438. / The "instman.sh" script doesn't invoke elvis correctly to format the
  1439.   man-pages.  It uses "-gquit" instead of "-Gquit", and the EXINIT variable
  1440.   as no effect because ELVISPATH=dummy.
  1441.  
  1442. / there seems to be a `!' substitution in command lines, this may
  1443.   be a "generalisation" of vi's command repetition `!!' (which
  1444.   allows command repetition and appending to a command, i.e.
  1445.   `!' substitution occurs only at the beginning of a command);
  1446.   IMHO the `original' behaviour (which was also implemented in
  1447.   elvis18) is better, because a substitution inside of a command
  1448.   is rarely needed, but now you have to quote all exclamation marks
  1449.  
  1450. / in vi the `print' and `list' commands query the `number' flag
  1451.   (and behave according to it, i.e. print line numbers or not)
  1452.  
  1453. / the join command could display a message like 'x lines joined'
  1454.  
  1455. / In the termcap interface, if you hit <Esc> in command mode, the following
  1456.   character is eaten.
  1457.  
  1458.     This is normal.  Hitting <Esc> causes the terminal to be "alerted,"
  1459.     which has the side effect of throwing away any characters already in
  1460.     the type-ahead queue.
  1461.  
  1462. / The defaultreadonly option is ignored.  The bufload() function resets each
  1463.   buffer's readonly flag before loading the file.
  1464.  
  1465. / if I call the (ex) join command with an adress range of 1 line
  1466.   (not a single adress, sounds strange, but see below ...) it
  1467.   joins 2 lines, but -per definition- it should do nothing
  1468.  
  1469.   e.g.:           :3,3j             joins lines 3 and 4!
  1470.  
  1471.   why bother? ... try the following command:
  1472.  
  1473.                 :v/./,/./-j
  1474.  
  1475.   in vi it compresses consecutive blank lines to one, but,
  1476.   due to the behavior of `join', elvis deletes all blank lines
  1477.  
  1478. / the following I've already reported, but now I can describe the
  1479.   error more precisely, also I can give you a hint, how to fix
  1480.   it:
  1481.  
  1482.       elvis deletes one `level' of backslashes before passing a
  1483.       command to the shell (concerns ex's `!', read and write
  1484.       commands, NOT vi's filter command !)
  1485.  
  1486.   I think it's easy to fix, but you should prove it; in `ex.c'
  1487.   change line 1228:
  1488.  
  1489.         if (*refp && !CHARchr(toCHAR("%#!@\\"), **refp))
  1490.                           ^^
  1491.                           delete this
  1492.  
  1493. / In the relative part of a line address, the "+" is optional.  I.e., the
  1494.   command ":.,.3y" should be identical to ":.,.+3y".
  1495.  
  1496. / The command ":g/^/m0" should reverse the order of all lines, but elvis
  1497.   just gives the message "destination can't be inside source".
  1498.  
  1499. / WinElvis doesn't print graphic characters correctly.
  1500.  
  1501. / Add support for multi-line strings which don't require a backslash.
  1502.  
  1503. / Typing some text and then (without hitting Esc) allowing the left arrow to
  1504.   autorepeat causes some characters to be lost.  This only happens under the
  1505.   X11 user interface.
  1506.  
  1507. / The description of the "keywordprg" option says that $1 is replaced by the
  1508.   current word, but currently the word is appended to the option's value.
  1509.  
  1510. --------------------------------------------------------------------------------
  1511. / Change version number in version.h to "2.1a-alpha"
  1512.  
  1513. / Changing one option via the Options menu causes all options in that dialog
  1514.   to be set, so ":set" with no arguments causes them to be displayed.
  1515.  
  1516.   FIXED: This is actually due to a quirk in elvis' options.c file.  I've fixed
  1517.   it.  Previously elvis didn't store the default value for each option; now
  1518.   it'll save the values of all options immediately after executing "elvis.ini"
  1519.   as the defaults.  Each option's OPT_SET flag will be set or cleared after
  1520.   a value is assigned to the option, depending on whether the new value
  1521.   matches the default value.
  1522.  
  1523. / Bug in filename completion under all Microsoft OSes (not just in Win32 gui):
  1524.   If you enter a directory name and partial file name using forward slashes,
  1525.   the substituted name will drop the directory name.  If I use a backslash,
  1526.   it works correctly.  For example, "guiwin32/gu<Tab>" becomes "guiwin.c" but
  1527.   "guiwin32\gu<Tab>" becomes "guiwin32\guiwin.c".
  1528.  
  1529.   FIXED, at least for Win32.  It is due to minor bugs in the osdir.c functions.
  1530.  
  1531. / In the X11 user interface, I've received some requests for more configuration
  1532.   options for the cursor.  Some folks don't like the hollow rectangle.  Add a
  1533.   new "cursorstyle" option which can be set to hollow, opaque, or xor.
  1534.  
  1535. / In addition to "xterm", perhaps guix11.test() should check for "iris-ansi"
  1536.   (for SGI) and "dtterm" (for CDE).
  1537.  
  1538. / In text mode, the cursor jumps to lower-right corner after each keystroke.
  1539.   Annoying on slow terminals.  This appears to be an attempt to clear the line,
  1540.   by drawing a bunch of spaces before the statusline text (showmode, ruler).
  1541.  
  1542. / Errors that occur interactively should not set exitcode to 1.
  1543.  
  1544. / eventreplace() doesn't move the cursor to the correct location.
  1545.  
  1546. / Add WinElvis and WinTags to the "makwin32.bat" file.
  1547.  
  1548. / In WinElvis, if the text doesn't completely fill the window, then the
  1549.   scrollbar will look funny.  This is unavoidable.  We would like to have
  1550.   the scrollbar's thumb completely fill the scrollbar (since the text
  1551.   completely fills the window) but Win32 tries to do us a favor by removing
  1552.   the scrollbar in that situation.
  1553.  
  1554. / :only can cause a core dump.  Try starting elvis without a file, running :sp
  1555.   and then :on
  1556.  
  1557. / :close can close the last window.  It shouldn't.
  1558.  
  1559.     Actually, that's a pretty convenient behavior to support.  The window's
  1560.     "close" button does a :close, which should be able to close the last
  1561.     window... if there aren't any modified buffers.
  1562.  
  1563. / Under Win32, if you move the pointer outside of the text window, it isn't
  1564.   restored to its intended shape when you move it back in again.
  1565.  
  1566. / Under X11, the resource for button colors must not be named "foreground".
  1567.   That leads to a foreground-on-foreground problem, so button labels aren't
  1568.   legible.
  1569.  
  1570. / Under X11, -client isn't sensitive to which machine the command is running
  1571.   on.  Perhaps the "ELVIS_SERVER" attribute name should be renamed to
  1572.   "ELVIS_ON_{hostname}".  Another problem is that user ids may differ --
  1573.   running in root and as a real user, for example.
  1574.  
  1575. / Backslash needs to be treated literally in more situations, especially
  1576.   under Win32.  A name like "C:\tmp\_tempfile" should be treated literally.
  1577.  
  1578.   The worst case is something like "C:\temp\$wc\foo", where the "$wc" is
  1579.   supposed to be literal.  I don't think anything can make this be rational!
  1580.   The current code interprets the backslash as a quote for the $ character,
  1581.   so elvis loads "C:\temp$wc\foo".  If backslash was literal, it would try
  1582.   to perform environment variable substitution for "$wc".  The current
  1583.   behavior is about as good as it gets.
  1584.  
  1585. / Does the ":lpr" command support ">>" to append to files?  It should.
  1586.  
  1587. / If the buffer doesn't end with a newline, then the Y command will go into
  1588.   an endless loop.
  1589.  
  1590. / Newly created windows should acquire input focus... and when entered
  1591.   interactively they do.  But for macros and the "elvis -client -c ..."
  1592.   command, this doesn't work correctly.
  1593.  
  1594. / The :s command (not :s/old/new/) is supposed to repeat the previous
  1595.   :s/old/new/ command, but doesn't.  The :& command works correctly.
  1596.  
  1597. / Under Win32, the italic font is shifted slightly to the left -- which is
  1598.   fine normally, but not after a ":set italicfont=n".  Then it clips off
  1599.   the uprights of many letters.
  1600.  
  1601. / Skip the "Hit <Enter> to continue" prompt if we're in the middle of a map.
  1602.  
  1603. / Tweak the tags stuff to use the proposed standard.
  1604.     - Allow :" after the address in field 3
  1605.     - Interpret file: as file:(tagfile) -- i.e., file: marks static tags
  1606.     - In the extra fields, the values are subjected to the following
  1607.       translations: = becomes =3D, tab becomes =09, newline becomes =0A
  1608.  
  1609. / Writing via ftp doesn't turn off the "writing" flag when complete.  This
  1610.   causes the next read to fail in an assert() statement.
  1611.