REPORT BUGS TO kirkenda@cs.pdx.edu (STEVE KIRKENDALL) NOTE: Each bug in this file is marked with either "*", "/", or "?". The "*" means the bug is still pending. The "/" means that I believe it has been solved. A "?" means that I've done some work on it, and *hope* it is solved because it seems to work better but I never really understood what was wrong in the first place. A "?" will become a "/" if I don't receive more reports of that bug. About 80% of this file lists *fixed* bugs. NOTE: Not all of these are truly bugs. This file also serves as my "to do" list, so some items are just unimplemented features that sounded like a good idea at one time or another. ----------------------------------------------------------------------------- Fixed (or not) in version 2.1_4: * Nested font changes don't always work correctly. For example, "FOO! bar?" displays "bar?" in the strong font. "Foo!" works though. / The built-in calculator's shell() function gives an ugly error message if the safer option is set. It fails correctly; it simply looks ugly. / POSIX says that ^F/^B should leave two lines overlapping, not just one / POSIX says that $ should accept a count, and move forward (count-1) lines. / Executing ":do source somefile", where somefile contains an inner :while loop, messes up the condition for the outer loop. ? The text-mode version of elvis sometimes has problems drawing characters near the left edge of the window. Apparently it gets confused about where the cursor is located. I've seen this on some occasions, but I not recently. I've never been able to reproduce it reliably. Perhaps it was a side-effect of some other bug? / Under MS-DOS with TERM=nansi (and NANSI.SYS installed, of course) the screen is shifted up one line. TERM=ansi works, but doesn't use nansi efficiently. / For gui="x11", if a window scrolls while some other window has pointer focus, then the cursor isn't drawn. This is important when, e.g., you use a dialog to search for text. / When the same buffer is shown in two windows, inserting text into one window can cause the other to scroll. This seems to occur only when the location of the change is above the top line of the other window. Apparently what's happening is this: In a series of blank lines, (i.e., lines which contain only a newline character), after any character is inserted before line n, line n-1 has the same offset than line n used to have, so the window update functions assume that line n-1 is really still line n, so it shows line n-1 at the top of the window instead of line n. Probably the win->di->topline variable, which is currently a long which stores an offset, should be replaced with a MARK. Since MARKs are updated when a buffer changes, this should fix it. * Given a URL such as "../untar.c", referenced from "/pub/elvis/unreleased", elvis 2.1_3 tries to fetch "/pub/elvis/unreleased/../untar.c", but it *MUST* be normalized as "/pub/elvis/untar.c" -- i.e., delete instances of "dir/../". Some web servers depend on this. ? In "html" mode, if a single displayed line contains more than one link, elvis always seems to follow the *last* link regardless of which one you click on. This is bad for some menu bars. Actually, this only seems to occur when multiple images appear on a line, and you want to download one of the images. For real links, elvis works correctly. I took a stab at fixing this one. It seems better now. ? There appears to be a bug in scanning -- a scanned block is not necessarily being locked for the whole time that it should be, which means that it may be removed from the block cache, in which case NULL may be returned by some of the blkXXXX() functions. Also, on at least one occasion elvis appeared to be trying to free a block which wasn't allocated. This may have something to do with the FEATURE_LITRE feature, or my recent attempts to make searches run faster by keeping at least one scan context for the current location at all times. The FEATURE_LITRE bug is fixed; hopefully that fixes this too. * There are still problems with running external programs under Win32. The :make command doesn't work. Also, the screen is sometimes messed up after running a program. I switched back to the older, more complex version of oswin32/osprg.c. The only problem it has is that sometimes 16-bit filter programs don't work correctly... but I just tested it again and that seems to work now. Anyway, 16-bit filters are less important than :make, so I'm keeping the older version. / When viewing an HTML document at a URL such as "http://foo/bar.html?boo/far", containing a link to "zot.html", elvis will resolve that link to be to "http://foo/bar.html?boo/zot.html", but it should be "http://foo/zot.html". Similarly, I suspect that fileext() fails on URLs like that. / Hitting ^] on an operator doesn't search for an "operatorXX" tag? I thought it did. It appears to work now. I don't know why it didn't work before. / The alias.c program (which is compiled as vi.exe, ex.exe, and view.exe) has been reported to cause problems under WindowsNT, and more recently under Windows98 as well. It appears that a Microsoft has introduced a bug into their versions of the "exec" system calls. I switched to "spawn", which waits a little RAM but seems to work correctly. / Under Windows95/98/NT, the "Terminal" font has funny spacing and sometimes characters overlap each other. This is a bug in the font, not in elvis. Elvis only supports fixed-pitch fonts, and although "Terminal" claims to be fixed-pitch, it is really a variable-pitch font. / Control chars in an alias aren't displayed in a printable form by the :alias command. ":alias clean s/.^H//g" looks like "alias clean s///g". / Add VIM's "smarttab" option -- keys at the beginning of a line act like ^T, so they indent by the shiftwidth amount using a combination of tabs and spaces. keys elsewhere in a line are real tabs. / One user reported that elvis was sensitive to keystrokes during quitting. I suspect that gui->poll was being called while the file was being written (possibly just when written via FTP). That write should not be quittable. ------------------------------------------------------------------------------ Fixed in 2.1_3 / One user reported crashes in WinElvis when the "Options->syntax" menu item is activated while in "syntax" display mode. / Can't identify tags whose whose contains a new-style comment. Apparently the tag-selector can't parse \/\/ in an regular expression. / Make elvis assume "-Gopen" if termcap can't be used. ? The :make command is still slightly weird. "elvis +make" waits until after a keystroke to display the first error message. / Document the ftp://host/~user/resource URL notation. / The :mark command should save the column number as well as the line number. (I.e., if no explicit address was given, then use the cursor position instead of the start of the cursor's line.) / Add a :cbshow alias which displays cut buffers. To do this right, elvis will need a text() function for fetching text lines... text() return the current line of the current buffer text(n) return line #n of the current buffer text(b,n) return line #n of buffer (b) / ":map ^H visual X" doesn't work when the cursor is at the end of the line. It deletes the last character, but then moves the cursor back two characters instead of just one. / Assertion fails at buffer.c:1206 when attempting to write an empty buffer. ? dmmarkup.c:1066: htmlinit: Assertion `first == True && col == 0' failed. / "Dead keys" don't work in "x11" gui. / If the .elvisrc file contains "set wrapmargin=0" then that option is displayed by a later ":set" command. It shouldn't be. This is a complication arising from the fact that wrapmargin is actually implemented via the textwidth option. Wrapmargin doesn't exist until a buffer is shown in a window, but defaults are normally recorded before that. / If there is no tags file in the current directory and inputtab=tagname then there is a long delay each time is hit. / Is this a good time to fix the bug where :make outputs the first error message *before* prompting the user to hit , when it should be after? / Add a "howto" describing Perl's error messages. / The "noanyerror" option shouldn't prevent the cursor from moving into locked files in the current directory -- only unwritables in some other directory. / It's back: Sometimes in "man" mode the cursor can't move up. This appears to happen only for .IP or .TP commands with long labels. I should probably change that code anyway, so the labels are considered to be separate lines in that situation. / It would be nice if FTP URLs supported user names as in ftp:host/~user/... in addition to just ftp:host/~/... When a user name is specified, the ~/.netrc file is searched for an account at that host which has that login name; the password is then taken from that entry. ? More importantly, it has been reported that the Windows versions don't read "elvis.ftp" correctly. (It works under Unix; I've tested it.) This appears to work under Win32, as far as I can tell. Perhaps the user who reported it didn't have "elvis.ftp" in a directory where elvis could find it? Or maybe the other changes I made to that file (to support ~user) had the side-effect of fixing this? / Add support for backticks in filenames -- the text between backticks is interpreted as a shell command, and the command's first line of output is substituted into the line. The main reason for supporting backticks is to do things like ":n `grep -l sometext *.c`". The backtick expression would return multiple file names. Because of this, it must be done at a fairly high level in the ex command-line parser. It would also be handy to have a "shell" function which runs a command string and returns its output. That function would be handy when implementing backtick support, and could also be used for things like... :let d=shell("date") / Under Win32, can't always redirect an external program's stdin. For example, ":%!\windows\command\sort" fails, but ":%!\usr\bin\sort" works. This is ridiculously difficult. I/O redirection depends on whether the program being run is 16-bit or 32-bit, whether you're running it from WinElvis or elvis, whether you're running Win95/98 or WinNT, and... something else that I haven't figured out yet. I give up. Instead of trying to do it the efficient way (with pipes when possible, and always using Win32 stdio redirection facilities), I decided to rewrite it from scratch to do it the brain-dead way: By constructing a shell script, and invoking COMMAND.COM to run that script. This sucks, but it appears to work reliably. ? On some systems, elvis sometimes reports "# is illegal during initialization" and then it skips some initialization steps for the first file. Later files will be initialized correctly; it only affects the first file. This has been reported under SCO and (I think) Irix. Unfortunately, it seems to interfere with the "-VVV" vebose feedback. I've improved error messages -- they now include the filename and line number where the problem was detected. Hopefully that'll allow me to get a little more feedback. I just tried the newest code under SCO, and this didn't happen. It worked fine. This is definitely a change in its behavior, and that's good... but I wish I knew why it started, and why it may have stopped. / Add a "digraph" topic to the howto file, and improve the documentation of digraphs in the main manual. / Lose the "tagprgonce" option; the :local command offers a cleaner solution. You can just say "local tagprg=..." in the alias, and be done with it. / The [[ and ]] commands shouldn't be line-mode moves. I.e., from the middle of a line, d]] should not delete the entire current line. / When a character-mode deletion ends at a newline, that newline should not be deleted. The same goes for yanking. ? The tagprg option (or something similar) should be used when reading tags for tag name completion. Apparently it isn't. Actually I think it is, but maybe not quite correctly. The code assumes the typed part of the tag name is always going to match the initial part of each match. If the tagprg program doesn't do that, then name completion gets confused. Changing this behavior will be hard. / In a shell command, file name completion should match binary files. / After a repeated insert such as 25i*, typing <.> will only repeat 24 insertions, not 25. ------------------------------------------------------------------------------ ELvis 2.1, official released version / Some HTTP sites require a "Host:" line in the GET request. The argument to "Host:" is the site name and port of the URL elvis is trying to download. / Check for licensing wordage in manual or README file. / In the "configure" script, xinc is set to /usr/include/X11, when it should be set to /usr/include. ? Under WinNT 4.0sp3, the "vi.exe" and "ex.exe" commands have been reported to cause problems. Input doesn't work right, and the whole DOS window goes away when elvis exits. / In macros, !(.)% should work but doesn't. ? Elvis has been reported to run out of memory when reading a large LaTeX file -- "http://www.loria.fr/services/tex/general/latex2e.html", although it isn't clear whether elvis is reading it via the net, or from a local file. It worked for me. The user didn't report what OS he's using. I suspect he's running the DOS version, in which case it isn't surprising that he's running out of memory (even with Win32 on a 64meg Pentium). / Change the default configuration to load lib/exalias.eg if there is no custom version in the user's home directory. Maybe rename it to "elvis.ali" or something like that. / Add an "lpheader" option, and modify dmnormal.c:header() to use it instead of the "lplines" option. / :s/re/cmd/x sets the cursor to the wrong line -- cmd should run on the line where re was found, but it is incorrectly running on the following line. / With textwidth set, if the first line of a file contains no whitespace and extends past the textwidth column, elvis dumps core. / Aliases tend to step on each other's use of options. Many macros temporarily set report=0 to avoid chatter while the alias runs. To restore it, they save the old value in the "r" option, and copy it back afterward. If if one alias calls another and they both do "let r=report", then the original value of "report" is lost. This is one specific example of a larger problem: aliases need local options. I've added a ":local" command. It is like ":set", except that it saves the old values of any options on a stack, so they can be automatically restored when the alias exits. Also, ":local" never outputs any options; this allows you to mark an option as being local without immediately changing its value. / Both "x11" and "windows" have an option named "toolbar". It behaves the same on both. Soon they'll both have "statusbar". They already had "scrollbar" but I changed the name of the X version since they behaved differently. I should try to unify this somehow -- both in the program and in the manual. / The ":gui ~Label" notation for deleting a button doesn't work, but the postfix ":gui Label~" version does. / It would be nice if "gui