1408 lines (1037 with data), 36.7 kB
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.
1211243 long $HOME causes joe to crash
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
empty syntax file crashes?
startup log should pop up whenever syntax files are loaded.
[we now have showlog]
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?)
search and replace 'fred' to 'foo':
find 'Fred', gets '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:
history for incremental search
^S return supposed to be normal 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).
jmacs vs. mg vs gnu-emacs:
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]
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 tried to keep offset at a multiple of scroll amount.. is
it needed?
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
user should be able to bring up a program and hit 'eval'.
Stay at math prompt for better calculator mode? But I'm so used to
hitting ESC m
"math" 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
how it works now:
1. load file with bfind
A. this calls setopt to determine ftype type, then
applies options from OPTIONS to B using lazy_opts
In particular, it looks up encoding and syntax based on names.
2. copy b->o to bw->o in bwmk
3. apply local options to bw->o
replace bw->o if ftype is given here?
4. use lazy_opts to propogate them back to bw->b->o
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.
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?
Performance:
getcontext causes huge cpu usage for very large functions
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'
tab completion should escape file names for joe
Fix filename quoting. The problem is that the ! and , syntax was a
mistake. The current work-around is to allow user to quote these
characters. I think we are de-quoting too much or something because
filenames with \ in them don't really work. Anyway, find some other
syntax to specify that the program is a command, or to load only a
certain part of it. 'joe *' should always work, even if the files
in the current directory after '!', ',' or '\' in them.
cd command: should canonicalized version of path be stored in history?
the buffer name should be in the clear, not quoted.. then we would
not have to dequote on save in particular, we need to handle !
differently... probably it should be an options flag.
so: on command line, no special meaning for !
at edit prompt: we remove the ! and convert it into a flag.. it probably
makes no sense to have this flag, or to even name the buffer
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:
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.
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.
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?
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?
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.
-------
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]