
Documentation

	Write more code documentation...

Nits:

	1413863  sigwinch breaks tcsetsw which messes up keyboard?  I
	haven't seen this

	1218686  syntax hightlight in hex mode (sheesh!)

	531899   joe +23 is weird: cursor on startup line

	- security hole with spell checker: abs path to checker needed.

	Make joerc merge program and run it on joerc.ru

	joe should open tty earlier in startup sequence because ^Y
	is suspend character on sun.

	rectangular blocks: make this a local file option?

	^C breaks in Cygwin when piping into joe

	grep ... | joe     missing lots sometime

State file:

	full path needs to go in line number restore code?

	auto reload of modified files?  a mode for this?

	try for previous screen configuration?

	multiple joes: the last one who exits wins: merge them

	security hole of saving yank history in state file

	old joe is messing up state file of new joe

Jmacs:
	1323285  joe does not repeatedly wrap searches (add an option for this?)

	JOE does not match emacs at how it handles wrap.  JOE wraps
	once but will not allow going past starting point.  Emacs complains
	when it gets to the end of the file, then wraps if the search is
	repeated.  Nothing prevents you from wrapping over and over again.

	(Search and replace never goes past the end of the file)
	(Search and replace prompt is different also, but maybe
	 not as important)

	^S return with nothing: set mark, then non-incremental search prompt

	^S return after some searches: set mark at original place, then exit
	incremental search.

	search and replace 'fred' to 'foo':
	find 'Fred', gets 'Foo'.
	(mg finds 'Fred', but inserts 'foo').

	Rectangle mode for emacs yank system

	Overtype mode works for yank

	exiting options and i-search with ESC is not pretty
	(it isn't in emacs either)

	jmacs glitches:

		Esc ltarw, Esc rtarw traverse words in gnu
		sadly this is difficult for jmacs because Esc Esc is
		options.  Should find someting else for options (or
		maybe detect pause after Esc Esc).

		history for incremental search

		^[ 0 ^K  delete line bkwd (arg set)

		^[ @   set mark arg words away

		^X ^P  mark page

		^X .  set left margin (fill prefix)
			(better off not setting this: JOE automatically sets
			the fill prefix).

	Compare jmacs and gnu with "mg":

		c-x c-s	jmacs: saves file.  gnu: prompts before saving.

		c-x c-v jmacs: reload original.  gnu: prompts with original as default.

		c-x d: jmacs: nothing.  gnu: menu.

		c-x c-r: jmacs: nothing.  gnu: load file in read-only mode.

		esc m  back to indentation (math in joe	Non-standard:

		c-x g  is goto line in mg, is goto matching delimiter in jmacs, udf gnu

		c-x p  previous window in mg  (prev error in jmacs), udf gnu

		c-x n  other window in mg   (next error in jmacs), udf gnu

		esc s search forwards   (suspend in jmacs, submenus in gnu)

		esc r  search backwards  (move to center line in jmacs and gnu)

Formatting:

	handling of bullets could be better, but conflicts with C comments

	Reformat paragraph should reformat C function if we're editing C.
	reformat/reindent function on ^KJ

	mode where wordwrap wraps rest of paragraph?

	mode where all editing wraps rest of paragraph?

Search and replace:

	a common operation is repeated search&replace within a selected
	block.  possibly cursor should go to start of block after each
	operation to make this easier.

	(similarly for macros: mode to repeatedly run macros while we're
	still in highlighted block?)

	(emacs has narrow-to-region for this)

Possible new features:

	Wrap long lines as in emacs/vim

	(a user asked: can it periodically reload log file like tail -f)?
	(just run tail -f in shell window)

	highlight all words which match during search?

	name keyboard macro and append it to .joerc file

	dynamic spell checking with highlighter- there should be a way

	1218701  report character offset in ^K-<space> (not just byte offset).

	Fixed record length editing mode

	Vertical windows (optionally lock-stepped).

	Folding

	-cleanup (delete extra lines and extra spaces at ends of lines).

	Emulate other editors?  Brief, EDT?  CUA?

	Use memory mapped files to fast load large files.  Have to not count
	no.  lines in each buffer on startup.

	Completion list build could take a long time
	in general we should be able to abort long operations...

	backspace in picture mode
	(it jumps to end of line - should it be like left-arrow?)

	- smart-end key

	- insert last word (last word typed/copied/etc.).

	- improve mnew/mold etc so we can gzip/gunzip files being
	  edited (maybe recursive call to file recognizer with .gz removed).

Locking:

	- when lock is stolen under us, we don't tell anyone.

Horizontal scrolling:

	We used to keep offset at a multiple of scroll amount.. is
	it needed?  Someone is asking for this now.

	When prompt window has to scroll it should also jump.  But this is
	only one line, so not as important.

	Maybe have settable fences for where automatic horizontal scrolling
	occurs.

Calculator:


	matlab like full buffer for calculator

	Stay at math prompt for better calculator mode?  But I'm so used to
	hitting ESC m

	user should be able to bring up a program and hit 'eval'.

	"math" vt command in cygwin not working.

	something like eng mode, but with a requested exponent.  Expand math
	formatting options? For example if user want to make a table..

	Degrees mode? Grad mode? (how to display?)
	  degree/rad/grad entry mode?  90deg gives pi/2 in radians mode.

	Decimal-Sexagesimal conversion (how to display?)

	Rectangular/Polar conversion (how to show two number result?)

	covariance, correlation coefficient?

	permutations = n ! / (n - r)!
	combinations = n ! / (r! * (n - r)!)

	user defined functions, loops?  (Integrate ivy...)

Online Help:

	completion list of internal commands brings up documentation

	Revamp help and status line system.  Merge status line and help
	renderers so that status line escapes can be used in the help
	screens and so that help screen formating can be used in status line
	(eliminating the need for right and left status strings- use springs
	instead).  Also:

	HTML-style thing for option selection?

	Take into account the post gettext substition for helphint and aborthint.

	Enhance help command so that you can supply a topic name argument.

	Provide help for each edit function (use edit function name as the
	help context name).

	Maybe provide a hierarchical help system: but this means turning help
	screen into a kind of buffer...

	Replace single character names like %e with %encoding;

Regex:

	Use c_comment, cpp_comment etc. from Ctrl-G to tell regex \!  how to
	parse (vs.  now, where it assumes C).

Macro language / command processing:

	Allow arguments after commands in ESC x, so we can say "cd foo". 
	During macro parse, collect arguments and save them in an array. 
	Modify pw.c to read arguments from this array.  If there are no more
	arguments, prompt the user instead.  Issues: Completion at the ESC x
	prompt is complex...  which character set should be used?  It
	depends on the command..

	Unify ESC x and ESC m (commands and math).  Replace math with ivy as
	a real extension language for JOE?  Make sure each option is visible
	from within the script (like options.autoindent).

	a common operation is macro execution to end of selected block.	
	abort macro when it reaches ^K K? EMACS has "narrow to region"
	concept to deal with this.

Joerc file:

	Make joerc file so we load system one and then apply local
	customizations (instead of loading an entire local one).

	Revamp rc file syntax: You can not put comments on lines with string
	arguments.  Maybe rc file becomes an ivy language source file...

	Ftyperc improvements: automatically try to determine file type for .in and
	backup~ files.

	Regex in ftyperc is weird because character set of file is not yet known. 
	For now we assume ascii_map..

Options / modes:

	options are screwed up: we copy window to buffer (to get buffer options
	to the buffer).  But if we have multiple windows, buffer options will have
	stale data.

	review options setting system:

	why is encoding / syntax not a command, but a mode?  (I think these
	probably should be commands)

	why is ftype a command instead of a mode?
	can we set encoding/syntax/ftype on command line: joe -ftype c fred

	Special processing for: readonly (we get it from b->rdonly, and
	stick it back after options)

		charmap (we delay lookup

		encoding (we delay lookup, also we try to learn it in
		lazyopt: should probably be in bload along with utf16 stuff)

	bw->o options: hex, ansi, syntax, zmsg, smsg, mfirst, autoindent, wordwrap
		spaces, mnew, mold, linums, crlf?, overtype, rmsg, purify,
		indentc, tab, istep, indentc, indentfirst, smarthome,
		smartbacks, *comment, 
	bw->b->o options:
		charmap, highlight?, text_delimiters, ansi?, syntax?

	when we set any particular option using mode command:
		we set it bw->o
		we then copy bw->o to bw->b->o.
		encoding / syntax also do this.

	Options data flow:
		rc file:
			uses glopt to set options in new OPTIONS struct initialized from fdefault

		bload:
			calls setopt to find options based on name and context using regex
				setopt calls lazy_opts to copy to b->o and set derived things

		ftype command:
			find options based on name using find_ftype
				calls lazy_opts to set bw->b->o
				copy bw->b->o back to bw->o

		command line:
			use bload (really bfind) to get file
			create window: this copies b->o to bw->o
			save b->rdonly in bw->o.readonly
			use backopt to set command line options.  This uses glopt on bw->o
			use lazy_opts to propogate options to b->o
			copy b->o back to bw->o here
			set b->rdonly from bw->o.readonly (allows command line to override rdonly).

		mode command (for ^T):
			sets option in bw using olddoopt
				uses applyopt for toggles
				copies bw->o to bw->b->o... why no lazy_opts?

		lazy_opts:
			The original purpose is so that we don't load every syntax file (when we build OPTIONs from ftyperc file):
			only load ones we intend to use.

			But this is a good place to put rules.

			We should copy b->o back to bw->o after calling lazy_opts.  This happens when new windows are created-
			mkbw gets the options from b.


Macro / command execution:

	Fix the macro system so that it is properly event driven.  It means
	query command does not recursively call edloop- instead it returns a
	contination structure.  The pain with this is to fix all locations
	which called a macro as a subroutine to generate a continuation (or
	use co-routines).

	exemac for first change: it should be run with cursor in window.

	-orphan will break -mnew, -mold macros (because macros are run
	without a window on the screen).

	- commands should be as deterministic as possible for
	easier macro writing.
	(some prompts give defaults sometime... this is bad)
	(psh should save all possible state information)

Mouse:

	- autoscroll: keep track of selection type (double-click or triple-click)
	- just scroll window with right button down?

	help screen mouse commands?
	double-click at prompts hits enter?
	double-click empty prompt, hits tab?
	right-click pops directory?
	right-click is cancel?
	double-click is yes?

File names:

	we should store location of menu. menu_above could change while menu is
	open (but menu could be deleted, so this raises other problems).

	Unnamed buffers should be in bufed list (was fixed in the lost joe 2.9)

	Improve completion some more: for example in the build command,
	complete command after | or ;.  To do this well we need intelligent
	parsing.  (for example, ignore ; in quotes).  Also complete quotes
	arguments like 'foo'

	Filename quoting: we have quoting in file names so that files with
	magic characters (! , >) can be accessed.  This is fine at prompts,
	but on command line is bad news: it means 'joe *' may not work
	with all files.  Maybe have '-start 10 -size 10 foo' instead of
	'foo,10,10' on the command line.

	It may be nicer if the filename in the buffers is not quoted- instead
	magic characters are converted to options.

	cd command: should canonicalized version of path be stored in history?

	in ^KE: any nicer way to clear the current path other than Ctrl-Y?

	 Should ^K E pop the shell window?
	    if current is scratch it should pop
	    popedit will not be needed then..

	- better grep-find (trigger in ^KE) to help find the file I want to load.
	(because often I exit or suspend the editor, grep to find what I'm looking
	for and then 'joe file')

Syntax highlighting:

	blue is too dim with a black background.  bold blue is ok.

	Garbage collect line attribute databases.

	allow options after string and istring? -just note it for now.

	In some of the newer syntax files we check for balanced parenthesis
	(color extra paren in red).  Implement this in all syntax files
	where it makes sense.
  
	Provide a command to save an HTML version of the file, rendered as
	our syntax highlight does.  VIM has this, and it would be easy to
	implement.

	Document the rules for coloring in the call and return transition. 
	Make it more convenient (I think recolor doesn't work during call,
	for example).

	Create a regex highlighter for JOE's search and replace prompts.

Unicode:

	In multi-file search and replace, we error if the character encoding
	changes.  Do something better here: convert the search/repace string? 
	Search/replace anyway even if the encoding is different?  Error only if we
	are outside ascii range?  Record the encoding along with each history
	line?  Ugh..

	Add unicode normalization to search/replace.

	Do something better with the 8-bit character table help screen.

	Prebuild radix trees for character classes to avoid startup
	overhead?  We could do this..

	check all type-like functions- make sure they expect unicode!
	hmm.. we always convert to unicode on input, but do we convert to the 8-bit
	charset of the buffer? check this.

	We could try go beyond tab and space.. but it's not so important...
	   - Need to parse utf8 in options.c and rc.c..
	   - Need to find all other places where we hand check for space and TAB
	   - Right now we can use brc on joe_isblank because the characters are all
	     one byte

	parse_string not utf8? Should be OK: it's only used with emit_string.

	path.c: rmatch.. should depend on locale (character class)

	Digit values
	[wrote function, but not using it]

	Java:
	  isJavaIdentifierStart: \p{Nl} \p{L} \p{Pc} \p{Sc}
	  isJavaIdentifierPart: isJavaIdentifierStart \p{Mn} \p{Mc} \p{Nd} ignorable
	  ignorable: 0x00-0x08, 0x0e-0x1b, 0x7f-0x9F

	byte to byte conversions?
	UTF-8 decoder right at input instead of in qw and utype?

	- right-left mode for Hebrew/Arabic?

	There is no good way to do this.  For all rtol, you could use a reversed
	xterm.  For mixed, you need tags to indicate direction.

Compiling

	Allow user to specify a regex for parsing errors.

	option for compile window size (or make mfit prompt for the size)

	Key to bring up help on word under cursor:
	  like pop up window with man page, or google search
	  for the function.

	    man -P cat -S 2:3 printf

	work with cscope?  hit F1 to look up man entry for function?

	Tags file search should auto-run ctags if there is no tags file.
	It should update it if any files have changed...

	gdb inteface?
	  run  (when segfault, jump to given source location)
	  run-to
	  step-over
	  step-into
	  eval  (to look at variables)
	  peek up stack frame

	Jump to definition (tags does this)

	Show list of references

	Diff mode (need vertical window)

	Tie in with CVS/etc.

	Refactoring

Code quality:

	Fixed buffer size is not good for some parse_ functions..  for
	example it limits the size of keyboard macros.  umtext is not good.. 
	uses fixed buffer during print.  Can we not use vs for all of this?

	In general get rid of fixed length buffers, for example when used with snprintf.

	we are missing many query and prompt window abort handlers, which cause
	small memory leaks.

	valgrind run: look for leaks.

	Dangerous situations:
		assume maint->curwin->object is a BW *
		call interactive functions (like doedit) and expect them
		to leave maint a buffer window (it could start a prompt).

		should check plain file checking.

		vs, zstring, cstring, there are too many, each with its own
		memory management.

Hex edit mode:

	Any modes should be forced in hex edit?
		force switch to overtype mode? [done]

		utf-8 file encoding needs to be off for hex mode.
		also crlf mode. [done]

		Scroll to left edge in case you enter hex edit while at end
		of long line.  [done]

VT:

	a common operation is clearing a shell buffer: make a key for this?
	[we have 'clear' command for this now]

	Long bash lines not quite working correctly...

	'parse' can't be used with commands with pipe symbol

	Keys for parserr and release?

	Preserve position in parser in case we re-parse (for very long compile we
	want to start looking at errors before it's done)

	It would be nice if ^G was goto instead of ESC space (when parserr is active?)
	(no good way to do this.)

	edit command in shell window does not work with '!pgm' if there is a
	current directory set.

	joe command in shell only works as an alias, not a real program.  This
	means when mercurial or p4 invokes an editor the wrong thing is done.

	We don't use lattr for ansi mode since we are not allowing colors to cross
	lines.  Save CPU cycles by not generating lattr for this case.

	Ansi effects not crossing lines means text doesn't remain properly colored
	over edit operations, like insert new line (para format).

	Mode to start joe with shell window.

	Save per-shell window current directory in joe state file and
	restore it next time?

	Would be nice if there was history for each virtual console.
		Can be done with environement variable HISTFILE.
		We need an argument to be passed to shell.sh for this: maybe vtbknd
		asks for an argument?

	Add magic joe command: append list of buffers.  Some way for ESC SP to jump
	to one of them.

	Context help for shell window?

	check querysave and nbuf/pbuf interactions with new buffer stack

	Hex mode probably doesn't mix correctly with vt

	Who owns keyboard, application or joe?
	Usually we want it to work the old way..
	It was nice when ` uparw actually worked..
		(there is one sneaky way to make ` work the old way...  have
		it mean quote only if it's the first thing in the read buffer)
	(done- but check other rc files...)

	Need ^K ' to make a new window... (how to go to it? Have one for grep?
	Compile?)
	We have F1 - F4
		If you exit shell and hit F2 again it messes up... (need
	better way to detect it's a shell window- filename compare, perhaps).

	Even then, a window should only be a master if the cursor matches
	the vt cursor.  This helps with the problem of closing a window and
	switching to another where cursor is far away.

	- using vtmaster to pick one to be the master...

	- how to switch it (for example if a window is closed)?  maybe
	  overall screen refresh has to watch for this?

Buffer switching:

	Scratch always pushes.  Do we want this?  It's weird for ESC c. 
	Maybe have a no-push version of scratch.

	cursor position history probably not working
	when buffers switch in windows.

Misc:

	ceslide patch?

	1218708  ? for unknown characters is not informative (at least highlight the ?)
	Show as hex <34>?
	For byte coded unused character: display character as we do in C. [we do
	this already]

	1304794  X at end of line is changed to space when character above 128 in utf-8
	  - check this one

	look at texec..

	maybe grep and build need to clear the block?
	they don't because they clear markb/markk in process of clearing scratch
	buffer

	[done: buffer stack]
	Not sure about switching to orphan mode.. but how can we have F1.F4 without it?

	If we keep orphan mode, make it more like regular joe:
	Do better when hitting ^C.. pop back to previous buffer in window?  Keep
	history list for this?

	Trouble when we switch to orphan mode:
	^K I does not put orphaned buffers on screen...
	Have to get users used to ^[ u and ^[ v

	When you use grep in a buffer, you can parserr.. but grep output can be
	highlighted with escape sequences.. parserr includes them in the file names.
		(done- you can now hit ESC SPACE in a shell window: would like it to
	be ^G.. also it would be nice buffer was parsed... maybe with progressive
	parsing?)

	Parse xterm version number.

	- orthogonal jump

Keys

	do not use ^[^[ for anything.  it prevents Alt-arrow
	from being useful.  It's usually bound to options, so at least
	make options pass unknown characters back to keysequence parser.

--------
MAC OS X
--------
Arrow: [D [C [A [B
Shift-arrow: [1;2D [1;2C  (no shift up/dn arrow)
Ctrl-arrow: (none)
Command-arrow: (none)
Option-arrow: b f [A [B
F1: OP
F2: OQ
F3: OR
F4: OS
F5: [15~
F6: [17~
F7: [18~
F8: [19~
F9: [20~
F10: [21~
F11: (nope)
F12: [24~
Delete: 
Shift-tab: [Z



-------
ssh 3.2
-------
Arrow: [C [D [A [B
Home: [2~ (uhg!)
End: [4~
Pgup: [5~
Pgdn: [6~
Ins: [2~
Del: 
F1: [11~
F2: [12~
F3: [13~
F4: [14~
F5: [15~
F6: [17~
F7: [18~
F8: [19~
F9: [20~
F10: [21~
F11: [23~
F12: [24~

Ctrl-arrow: -
Alt-arrow: - (can set Alt=ESC mode, but doesn't work with arrow keys)
Shift-arrow: -

-----
PuTTY
-----

Arrow: [C [D [A [B
Home: [1~
End: [4~
Pgup: [5~
Pgdn: [6~
Ins: [2~
Del: [3~
F1: [11~
F2: [12~
F3: [13~
F4: [14~
F5: [15~
F6: [17~
F7: [18~
F8: [19~
F9: [20~
F10: [21~
F11: [23~
F12: [24~

Ctrl-arrow: OC OD OA OB
Ctrl-home: -
Ctrl-end: -
Ctrl-pgup: putty scroll back
Ctrl-pgdn: putty scroll fwrd
Ctrl-ins: -
Ctrl-del: -

Alt-arrow: [C [D [A [B
Alt-pgup: [5~
Alt-pgdn: [6~
Alt-home: [1~
Alt-end: [4~
Alt-ins: [2~
Alt-del: [3~

Shift-arrow: [C [D [A [B
Shift-home: [1~
Shift-end: [4~
Shift-pgup: putty scroll back
Shift-pgdn: putty scroll fwrd
Shift-ins: 
Shift-del: [3~

-----
XTerm
-----

Arrow: [C [D [A [B
Home: [H
End: [F
PgUp: [5~
PgDn: [6~
Ins: [2~
Del: [3~
F1: OP
F2: OQ
F3: OR
F4: OS
F5: [15~
F6: [17~
F7: [18~
F8: [19~
F9: [20~
F10: [21~
F11: [23~
F12: [24~

Ctrl-arrow: [1;5C [1;5D [1;5A [1;5B
Ctrl-home: [1;5H
Ctrl-end: [1;5F
Ctrl-pgup: [5;5~
Ctrl-pgdn: [6;5~
Ctrl-ins: [2;5~
Ctrl-del: [3;5~

Shift-arrow: [1;2C [1;2D [1;2A [1;2B
Shift-home: [1;2H
Shift-end: [1;2F
Shift-pgup: -
Shift-pgdn: -
Shift-ins: ttp://www.gush-shalom.org/archives/kurdi_eng.html
Shift-del: [3;2~

Shift-ctrl-arrow: [1;6C [1;6D [1;6A [1;6B

Alt-ctrl-arrow: [1;7C [1;7D [1;7A [1;7B

Alt-shift-arrow: [1;4C [1;4D [1;4A [1;4B

Alt-shift-ctrl-arrow: [1;8C [1;8D [1;8A [1;8B

Alt-arrow: [1;3C [1;3D [1;3A [1;3B
Alt-home: [1;3H
Alt-end: [1;3F
Alt-pgup: [5;3~
Alt-pgdn: [6;3~
Alt-ins: [2;3~
Alt-del: [3;3~

----
rxvt
----
Arrow: [C [D [A [B
Home: [7~
End: [8~
Pgup: [5~
Pgdn: [6~
Ins: [2~
Del: [3~

F1: [11~
F2: [12~
F3: [13~
F4: [14~
F5: [15~
F6: [17~
F7: [18~
F8: [19~
F9: [20~
F10: [21~
F11: [23~
F12: [24~

Ctrl-arrow: Oc Od Oa Ob
Ctrl-home: [7^
Ctrl-end: [8^
Ctrl-pgup: [5^
Ctrl-pgdn: [6^
Ctrl-ins: [2^
Ctrl-del: [3^

Shift-arrow: [c [d [a [b

Shift-ctrl-arrow: [c [b [a [b

Alt-ctrl-arrow: Oc Od Oa Ob

Alt-shift-arrow: [c [d [a [b

Alt-arrow: [C [D [A [B

--------------
gnome-terminal
--------------

Arrows: [C [D [A [B
Home: OH
End: OF
PgUp: [5~
PgDn: [6~
Ins: [2~
Del: [3~
F1: -
F2: OQ
F3: OR
F4: OS
F5: [15~~
F6: [17~~
F7: [18~~
F8: [19~
F9: [20~
F10: -
F11: [23~
F12: [24~

Ctrl-arrow: [5C [5D [5A [5B
Ctrl-home: OH
Ctrl-end: OF
Ctrl-pgup: -
Ctrl-pgdn: -
Ctrl-ins: [2;5~
Ctrl-del: [3;5~

Shift-arrows: [2C [2D [2A [2B
Shift-home: -
Shift-end: -
Shift-pgup: -
Shift-pgdn: -
Shift-ins: -
Shift-del: [3;2~

Alt-arrows: [3C [3D [3A [3B
Alt-home: OH
Alt-end: OF
Alt-PgUp: [5;3~
Alt-PgDn: [6;3~
Alt-Insert: [2;3~
Alt-Delete: [3;3~

Ctrl-Alt-arrows: - (window manager takes)
Ctrl-Shift-arrows: [6C [6D [6A [6B
Ctrl-Shift-Alt-arrows: [8C [8D [8A [8B
 
-------
konsole
-------
Arrows: [C [D [A [B
Home: [H
End: [F
PgUp: [5~
PgDn: [6~
Ins: [2~
Del: [3~
F1: OP
F2: OQ
F3: OR
F4: OS
F5: [15~
F6: [17~
F7: [18~
F8: [19~
F9: [20~
F10: [21~
F11: [23~
F12: [24~

Ctrl-arrows: [C [D [A [B
Ctrl-home: [H
Ctrl-end: [F
Ctrl-PgUp: [5~
Ctrl-PgDn: [6~
Ctrl-ins: [2~
Ctrl-del: [3~

Shift-arrows: -
Shift-home: [2H
Shift-end: [2F
Shift-PgUp: -
Shift-PgDn: -
Shift-Ins: -
Shift-Del: [3;2~

Alt-arrows: [C [D [A  [B
Alt-home: [H
Alt-end: [F
Alt-PgUp: [5~
Alt-PgDn: [6~
Alt-Ins: [2~
Alt-Del: [3~

-------------
linux console
-------------
Arrows: [C [D [A [B
Home: [1~
End: [4~
PgUp: [5~
PgDn: [6~
Ins: [2~
Del: [3~
F1: [[A
F2: [[B
F3: [[C
F4: [[D
F5: [[E
F6: [17~
F7: [18~
F8: [19~
F9: [20~
F10: [21~
F11: [23~
F12: [24~

Ctrl-arrows: [C [D [A [B
Ctrl-home: [1~
Ctrl-end: [4~
Ctrl-pgup: [5~
Ctrl-pgdn: [6~
Ctrl-ins: [2~
Ctrl-del: [3~

Shift-arrows: [C
Shift-home: [1~

Alt-arrows: - (switches console)
Alt-home: [1~

--------------
cygwin console
--------------
Arrows: [C [D [A [B
Home: [1~
End: [4~
PgUp: [5~
PgDn: [6~
Ins: [2~
Del: [3~
F1: [[A
F2: [[B
F3: [[C
F4: [[D
F5: [[E
F6: [17~
F7: [18~
F8: [19~
F9: [20~
F10: [21~
F11: [23~
F12: [24~

Ctrl-arrows: -
Shift-arrows: -

Alt-enything: prefixed with ESC

-----------------------
jstar missing sequences
-----------------------
^O options (supposed to be set tab width)
^P print
^U undo (supossed to be unerase)
^^ autoindent on/off
^\ meta (supposed to be refresh screen)
ESC =  insert math result
ESC $  insert math result money formatted
ESC #  insert math equation
ESC m  Memorandum
ESC s  isearch fwrd (supposed to be Sincerely)
ESC c  compile (supposed to be center line)
^Q U   align paragraph (don't know what this does)
^Q ^Q  repeat next command once every second
^Q O   spell check entered word
^Q W   scroll up- repeat once every second
^Q Z   scroll down- repeat once every second
^Q Ins  it does something...
^Q Home  scroll up repeating
^Q End   scroll down repeating
^K M     math
^K F     run dos comment
^K N     column mode on
^K I     column replace mode on
^K O     copy file
^K E     rename file
^K J     erase file
^K L     change drive
^K uparw  rename file
^K dnarw  save and exit
^K ltarw  save
^K rtarw  ^K D save
^K Ins    move
^K Home   quit
^K End    quit
^K '      to markk
-----------------------

-----------------
notepad/cua mode?
-----------------
- ^A	select all
- ^F	find
- ^G	goto line
X ^H	replace
X ^J	return
- ^N	new blank file
- ^O	edit file (asks to save current)
^P	print
- ^S	save
- ^V	paste
- ^Z	undo
- ^X	cut
- ^C	copy
- F3	find next
- F5	date/time

===============================================
Done:

 Fix it so all options appear in ^T.  Maybe make hook function
 to handle major changes.
[done, we can assign mactos to ^T]

 Look into clearing right-most column.
[done, we now use it]

Shell windows:
 Better environment settings for shell windows.
[done- we now have vt mode]

Perl compatible regex search.
[done!]

regex: character classes? a-z matches any letter?
[done!]

- save all files without asking thing for quick compile
[done! Use ESC c to save all]

- shell window intercept should be smarter.  hit ^K ^H- the ^H is going to the
  shell window.
[done, we now have a context for this]

  define characters which make up words
    There are some A-Zs in tomatch (should use i18n).
[done: fixed with i18n project]

- better editing in shell windows: use for calculator mode too?
[done, we have vt mode]

- update man page
[done, but keep it up to date]

622978   use last column
[done]

- need current directory for grep-find.
[done]

should force -Wall if compiler is gcc
[there is no way to do this]

	document ` in 'txt' (format test as status line)
	additional formatting things in status line
		`%n		filename
		`%dd		day
		`%dm		month
		`%dY		year
		`%Ename%	environment variable
[done]

UTF-8 between 0x40000000 - 0x7FFFFFFF is not displayed correctly because of
ANSI_BIT.  joe_wcwidth return 0 width for these, but it should be zero width
only in ansi mode.
 [done: we just changed ANSI_BIT to 0x80000000]

Unicode:
  Support combining characters properly.  
[done]

Can we find an updated version of wcwidth?
[done- but do more checking]

Rtree gets very big before calling rtree_opt.. (we were exceeding 32K leaf
nodes, overflowing short)
  We need to optimize while we build...
  [done]

Get rid of cmap, use rtree instead in kbd.c/kbd.h.  [cmap may have been
better for this, but it does help debug rtrees...]
[done]

Auto generate the toupper / tolower from i18n.c  Eliminate i18n.c
[done]
Accept character classes, not just UTF-8 in syntax files.
[done]

Improve speed of regex? Compile to perfect hash? At least sort the
intervals?
[done]

[fixed]
we parse strings, which does escape processing.
  but then we call parse_class on the parse string which also does escape processing.
build should report return value of make
[done]

grep and build should switch to the current directory first.
   "scratch" needs to inherit current directory
     hmm..
     [done- also load "* Startup Log *" first to prevent inheriting- for
example when we start shell windows]

   "grep" and "build" need to change directory before running
     [fixed]
   parse already does the right thing

 parsed file names with spaces not working correctly
 parse file names with no line numbers?
 [fixed]

 add shell commands to other rc files
 [done]

 status command should use status line escape sequences
 [done]

 messages from shell windows sometimes do not show up.  The issue is that
when we close a prompt window, we resize the shell window.  This causes bash
to redraw the line.  This input counts as typing and causes the message to
be erased (it just causes a screen update which notices the updtab flag
set).. We need some other way (than setting updtab) to clear the message-
maybe set updtab on next user input.
 [fixed- now we remove message only on user input, not shell input]

 security hole with "math"
 [fixed]

 parserr - it would be nice if parsing was limited to a block
 [done]

 parserr - no way to turn off highlighting line (but ESC space is OK).
 [fixed: added release command]

 'parserr' leaving many copies of buffer?
 [fixed]

 message printed when we close last window and switch to orphan buffer
 [fixed- now we always do it, but can turn off with noexmsg]

 shell joe command doesn't work with absolute path if prefix is added.
 this doesn't work well with ^KE either (need to clear path manually)
   emacs does some magic here.. if it detects // it ignores prefix
     two parts:
       it displays prefix with { }
       when opening file, it starts with the /
 [fixed- now we do same as emacs]

 when we 'edit' in a shell window, it should pop before loading the new one.
  otherwise we get a bunch of copies of the shell window I think
 [fixed]

 Esc sequences could be optimized out: delete one if it results in same
 attributes that already exist
 [done]

 check for n^2 algorithms
 [done]

Pgetc() does not now always return a character... this breaks paragraph
formatter and anything that expect binsc(pgetc) to work.
 [fixed: we assign a code for each ansi sequence]

 clean up macro execute for magic shell commands:
   only execute shell_ ones...
   only execute if window is on screen...
   how do we allow "file"?  it should only be allowed in prompts, and not
   allowed to be typed into the shell.
 [done]

 Need per-shell window current directory.
  Logbuf?  Sometimes?
 [done: the buffer records the current directory]

 color on status line gets messed up when shell text is colored.. how can
this even happen?
 [fixed] 

 cursor in wrong position when I abort a window and shell window gets pulled
on.. need EFIXXCOL, but joe crashes when I enable it for abort command.
 abort a window and shell window replaces it:
   cursor is wrong. we need EFFIXCOL on abort.. any others?
  [fixed]

 'joe' in a shell window should edit a file.
[done]

Think more about keeping cursor in sync: from shell window, edit file, ^C,
we're back in shell window but cursor is in the wrong place.
 [fixed- we were not keeping cursor up to date in orphan windows]

nbuf/pbuf do not call resize, so swapping in a shell window is not properly resized.
 [seems to be fixed, but not sure where resize is getting called..]

multiple windows open on one shell window is kind of broken (you get
conflicting resize events from each of them).  There should be a concept
of the master window.
 [fixed, we use the last one]

Need raw mode which works the old way.. (mostly for debugging joe..)
  [done]

Resize needs more testing.  Resize with 'man ls' not quite working.
Weird things will happen with multiple window with synchronized cursors.
   [fixed- was due to scrolling region not being resized]

Resize not working when you kill other window?
 [seems to be ok]

^K V should jump to vt cursor... (done)

UTF-8 syntax files?
[done]

utils.c:parse_ident not using utf8?
[done: now allows utf8 identifiers]

move getcodeset stuff from utf8.c -> charmap
[done]

Ctrl-G logic bugs:
  xml with utf-8 chars: does not jump to first char, we must be assuming
chars are bytes
  there is delimiter buffer but it's bytes, not chars
[done]

tomatch_xml: does not handle unicode names
[done]

umath use joe_isalpha_? problem is we eval a char buffer, not an editor
buffer.
 [fixed]

fwrd_c and utf8_decode_fwrd output is not directly compatible with joe_is
functions.  But pgetc and brch output is.
[done- now they return UTF8_XXX which is outside of negative character range]

  - check all other users of joe_is...
     - options.c, rc.c
     - sometimes we use brc and brch for joe_isblank
   [done]

check yncheck..
[modifed to convert to locale if necessary]

macros.c: unescape seems broken
 [fixed - but it would be nice if the buffer sizes were not limited]

"-wrap" is messing up isrch somehow
[fixed]


New regex engine:
      add case ignore:
          done, however right now we do simple folding for classes and full
          folding outside of classes.  I think maybe better to do simple
          folding for both?  Any point of full folding without
          normalization?

      unicode normalization, ugh.  Maybe this should be optional.
      have an option 'n' for normalized search?

      check performance and memory leaks

      add \c
      [done]

      optional standard regex syntax?
      [done]

      add code to allow use of boyer-moore
      [done: we even do it on utf-8 if we can (if there is no case folding)]

      handle byte encoding correctly- we are only handling unicode
        - what happens if you search/replace across file with different
          encodings? maybe recompile for each file?  Actually we are already
          recompiling for this case. [nope, we give an error if you try it]
      [Done: character classes are converted to byte code]

      syntax ok? update help if it is..
      [done]

      check char to int promotions [done].

Now that we have new regex engine:
      switch to it for ftyperc? [done]

Reformat long line is too slow
 [improved, but look into prgetc improvement also]

Improve syntax files to work with unicode.
[done (but we can always do more..)]

quote tab should insert a tab
[done]
	txt should insert literal tabs.. BTW, txt is broken.. assumes 8-bit
	[done]

only "brpaste" shows up in a macro when I paste: I rather have the text..
[fixed]

replacement string:
	provide a way to convert to upper/lower or otherwise modify
	selection: sed has \u \U \l \L \E
[done]

Added some more convenient classes:
   see http://www.w3.org/TR/xml11/#NT-NameStartChar
   see http://www.w3.org/TR/xmlschma11-2/#regexs

	\d	Digit: same as \p{Nd}
	\D	opposite
	\s	space, tab, newline, return
	\S	opposite
	\w	word character: [\x{0}-\x{10ffff}]-[\p{P}\p{Z}\p{C}]
	\W	opposite
	\p{block-name}

	\i	NameStartChar
			: A-Z _ a-z C0-D6 D8-F6 F8-2FF 370-37D 37F-1FFF 200C-200D 2070-218F 2C00-2FEF 3001-D7FF F900-FDCF FDF0-FFFD 10000-EFFFF
	\I	opposite
	\c	NameChar
			\i - . 0-9 B7 0300-036F 203F-2040
	\C	opposite
[done]

take brpaste disable patch
[done- added brpaste mode]

need shell-like tab completion in compile/grep prompt
[done]

take ftyperc patch..
[done- created ftype command, rearranged ftyperc]

  This is broken for setting the syntax on the command line: we look in bw->o for it, not bw->b->o.
  [fixed]

Timing fix for bracketed paste should disable spaces.  We should have a mode
to disable the timing fix.
[done]

  Long paths not working with cd command in shell windows?  How about spaces
  in shell window cd command?
  [fixed: but the problem is fixed length buffers: vt->buf, mparse->bf]

In syntaxes (Ruby, Perl) which allow interpolation (or substition)
recusively call the highlighter.  We did in the some of the newer ones.
[done]

	Should ESC < and ESC > scroll by the amounts given in the left and
	right parameters? [Yes, implemented it.]

	Should negative values of left and right refer to screen fraction? 
	So -2 means 1/2, -4 means 1/4? [Yes, implemented.]

	Do we really need left & right? Why not just scroll amount? [Hmm.. keep it,
	I had right = 1, and left = 10 before].

cd command: if you leave out the trailing / it ignores it [fixed]

tab at math prompt should go through variables, functions.
[done]

jmacs fixes:
		c-x b  jmacs: nbuf, gnu: offers prompt with next buffer [fixed, before in jmacs this was bufed]

		c-x c-b	jmacs: bufed prompt.  gnu: menu. [fixed, before in jmacs this was nbuf]

		c-x 0  (delete window) prints exit message even when we are not abandoning the file - why? [fixed]

		M-^: jmacs: deletes indentation, blank lines below.  gnu: deletes indentation, blank line above- pulls current line to end of previous [fixed]
calculator:
	assume entire file if no region selected [done]

	tab completion should escape file names for joe [fixed]

	joe --help should print command line options [done]

Performance:

	getcontext causes huge cpu usage for very large functions
	[fixed]

GUI:

	Provide an xjoe script which runs joe in an xterm in the install. 
	This way something exists for the "open this file with" prompts in
	windowing systems.
	[fixed, we now include .desktop files]


	1211243  long $HOME causes joe to crash
	[fixed, but we should eliminate more fixed length buffers]

	empty syntax file crashes?
	[fixed, we detect this now]

	startup log should pop up whenever syntax files are loaded.
	[we now have showlog]

Performance:

	getcontext causes huge cpu usage for very large functions
	[this is now fixed]

