1CL:	In single-line screens, have to press 'q' twice when quitting out
2	of  a ":set all" display.
3
4COMMON:	There's a serious problem with error returns -- we need to separate
5	command failure from fatal error, consistently, over the entire source
6	tree.
7
8	We need to rework all of vi to have three return values:
9
10	0: success
11	1: vi error, continue
12	2: fatal error, die
13
14	Right now we don't recognize fatal errors for what they are.
15
16VI:	Change the screen scrolling to not eat user characters...  i.e.
17	g/pattern/foo should not eat already entered chars.
18
19COMMON:	It's known that it's possible to sync the backing files in the
20	wrong manner, leaving backup files that aren't recoverable.  This
21	is going to be left alone until we have a logging version of DB,
22	which will hopefully fix this (or at least make it possible to
23	easily do so).
24
25COMMON:	The complete list of POSIX.1 calls that can return EINTR are:
26
27	wait, waitpid, sleep, dup2, close, read, write,
28	fcntl(SETLCKW) tcsetattr, tcdrain
29
30	The problem is that technically, any system/library call can
31	return EINTR, so, while nvi blocks (most of?) the obvious ones,
32	someone may have to do a complete pass and block signals
33	everywhere.
34
35COMMON: The vi main command loop should use the general-purpose overflow
36	and underflow routines.  In addition, the vi command loop uses
37	unsigned longs -- should probably be fixed as a 32-bit unsigned
38	type, and then check to make sure it's never used as as variable
39	type again.
40
41DB:	When nvi edits files that don't have trailing newlines, it appends
42	one, regardless.  This is required, by default, from POSIX.2.
43
44COMMON:	Open mode is not yet implemented.
45
46COMMON:	^C isn't passed to the shell in the script windows as an interrupt
47	character.
48
49COMMON:	The options:
50
51	hardtabs, lisp, optimize, redraw, slowopen
52
53	are recognized, but not implemented.  These options are unlikely
54	to be implemented, so if you want them you might want to say
55	something!  I will implement lisp if anyone ever documents how it
56	worked.
57
58COMMON:	If you run out of space in the recovery directory, the recovery
59	file is left in place.
60
61COMMON:	Should "view" set a lock on the file?
62
63COMMON:	Field editing shouldn't be hard to add to nvi:
64
65	Field editing file template:
66
67	version #
68	field #	row/column start	row/column stop
69	label	field #		Label string
70	re	field #		Matching re string.
71	field #	row/column start	row/column stop
72	label	field #		Label string
73	re	field #		Matching re string.
74
75	<tab> moves to the next field
76	<bs> in column 0 moves to the previous field
77
78COMMON:	Let's rethink using an IPC mechanism:
79
80	Two way channel, with events passing in both directions.
81
82	Load into the same address space (else, how do file permissions) forks
83	in v_init -- screens get events from vi, vi gets events queued up from
84	screens.
85
86	  Vi:
87		E_CHARACTER,            /* Input character: e_c set. */
88		E_EOF,                  /* End of input (NOT ^D). */
89		E_ERR,                  /* Input error. */
90		E_INTERRUPT,            /* Interrupt. */
91		E_REPAINT,              /* Repaint: e_flno, e_tlno set. */
92		E_RESIZE,               /* SIGWINCH: e_lno, e_cno set. */
93		E_SIGCONT,              /* SIGCONT arrived. */
94		E_SIGFATAL,             /* fatal signal arrived.
95		E_START,                /* Start ex/vi. */
96		E_STOP,                 /* Stop ex/vi. */
97		E_STRING,               /* Input string: e_csp, e_len set. */
98
99	  Screen:
100		E_ADDSTR		/* Add a string to the screen. */
101		E_ATTRIBUTE		/* Screen attribute. */
102		E_BELL			/* Beep/bell/flash the terminal. */
103		E_BUSY			/* Display a busy message. */
104		E_CANONICAL		/* Enter tty canonical mode. */
105		E_CLRTOEOL		/* Clear to the end of the line. */
106		E_CURSOR		/* Return the cursor location. */
107		E_DELETELN		/* Delete a line. */
108		E_DISCARD		/* Discard a screen. */
109		E_EXADJUST		/* Ex: screen adjustment routine. */
110		E_FMAP			/* Set a function key. */
111		E_GETKEY		/* Get a key event. */
112		E_INSERTLN		/* Insert a line. */
113		E_MOVE			/* Move the cursor. */
114		E_MESSAGE		/* Message or ex output. */
115		E_REFRESH		/* Refresh the screen. */
116		E_RESIZE		/* Resize two screens. */
117		E_SPLIT			/* Split the screen. */
118		E_SUSPEND		/* Suspend the editor. */
119
120EX:	It would be nice to inverse video the replaced text during
121	interactive substitute.
122
123EX:	The :args command should put the current file name out in reverse
124	video.  This isn't going to be easy, currently only full lines can
125	be in reverse video, not just parts.
126
127TK:	We currently permit the user to change the lines, columns and term
128	edit options.  Shouldn't that be illegal in tknvi?
129
130VI:	The strings found by searches should be highlighted until the next
131	character is entered.
132
133VI:	Display a split vi screen for the :help command.
134
135VI:	When getting a key for a continue screen, we should always read from
136	the terminal, not from a mapped key.
137
138VI:	The sentence, paragraph and section movement commands don't match
139	historic practice in some boundary cases.  This should be left
140	alone until POSIX 1003.2 makes up its mind.
141
142VI:	The vs_sm_fill routine should scroll if possible, not always redraw.
143
144VI:	Think about setting a dirty/inuse bits on the lines of the SMAP
145	structure.  That way the message routines could steal lines and
146	refresh would continue to work, because it would know not to touch
147	the lines that were in use.
148