# Id: TODO,v 8.2 1997/04/12 15:53:31 bostic Exp (Berkeley) Date: 1997/04/12 15:53:31 ======================================================================== GENERAL ======================================================================== 2.0: Open mode is not yet implemented. ======================================================================== DB ======================================================================== 1.N When nvi edits files that don't have trailing newlines, it appends one, regardless. This is required, by default, from POSIX.2. 1.N: If you run out of space in the recovery directory, the recovery file is left in place. 2.0: It's known that it's possible to sync the backing files in the wrong manner, leaving backup files that aren't recoverable. This is going to be left alone until we have a logging version of DB, which will hopefully fix this (or at least make it possible to easily do so). ======================================================================== VI ======================================================================== 1.N: Make the search pattern and command history (what the '.' command executes) remembered between windows, or configurable so that it is. 1.N: Change the screen scrolling to not eat user characters... i.e. g/pattern/foo should not eat already entered chars. 1.N: The vi main command loop should use the general-purpose overflow and underflow routines. In addition, the vi command loop uses unsigned longs -- should probably be fixed as a 32-bit unsigned type, and then check to make sure it's never used as as variable type again. 1.N: Should "view" set a lock on the file? 1.N: Should "view" copy the file (or even open a recovery file)? 1.N: The strings found by searches should be highlighted until the next character is entered. 1.N: Display a split vi screen for the :help command. 1.N: When getting a key for a continue screen, we should always read from the terminal, not from a mapped key. 1.N: The sentence, paragraph and section movement commands don't match historic practice in some boundary cases. This should be left alone until POSIX 1003.2 makes up its mind. 1.N: The vs_sm_fill routine should scroll if possible, not always redraw. 1.N: Think about setting a dirty/inuse bits on the lines of the SMAP structure. That way the message routines could steal lines and refresh would continue to work, because it would know not to touch the lines that were in use. ======================================================================== EX ======================================================================== 2.0: ^C isn't passed to the shell in the script windows as an interrupt character. 2.0: It would be nice to inverse video the replaced text during interactive substitute. 2.0: The :args command should put the current file name out in reverse video. This isn't going to be easy, currently only full lines can be in reverse video, not just parts. ======================================================================== CURSES ======================================================================== 1.N In single-line screens, have to press 'q' twice when quitting out of a ":set all" display. ======================================================================== MOTIF/IPC ======================================================================== 1.N: We currently permit the user to change the lines, columns and term edit options. Shouldn't that be illegal in a window interface? ======================================================================== REDESIGN ======================================================================== 2.0: There's a serious problem with error returns -- we need to separate command failure from fatal error, consistently, over the entire source tree. We need to rework all of vi to have three return values: 0: success 1: vi error, continue 2: fatal error, die Right now we don't recognize fatal errors for what they are. 2.0: The complete list of POSIX.1 calls that can return EINTR are: wait, waitpid, sleep, dup2, close, read, write, fcntl(SETLCKW) tcsetattr, tcdrain The problem is that technically, any system/library call can return EINTR, so, while nvi blocks (most of?) the obvious ones, someone may have to do a complete pass and block signals everywhere. 2.0: The options hardtabs, lisp, optimize, redraw, and slowopen are recognized, but not implemented. 2.0: Field editing shouldn't be hard to add to nvi: Field editing file template: version # field # row/column start row/column stop label field # Label string re field # Matching re string. field # row/column start row/column stop label field # Label string re field # Matching re string. moves to the next field in column 0 moves to the previous field