Known Bugs: * Null-byte in strings not always handled transparently * Saving another user's file will only preserve the user when run as root. Generally, it is hard to ensure that a) save point files can be created and b) the file mode and ownership of re-created files can be preserved. We should fall back silently to an (inefficient) memory copy or temporary file strategy if this is detected. * crashes on large files: S^EM^X$ (regexp: .*) * the glib allocators are fundamentally broken: throwing exceptions is unsafe from C-linkage callbacks. * Colors are weird in PDCurses/win32 console. * Inconsistent path separators. E.g. EN and * will contain backslashes on Windows. Code not taking this into account fails. Either slashes should be normalized to / or there should be a conditional to check for path separators. Features: * The C/C++ lexer supports preprocessor evaluation. This is currently always enabled but there are no defines. Could be added as a global reg to set up defines easily. * Now that we have redo/reinsertion: When ^G modifier is active, normal inserts could insert between effective and rubbed out command line - without resetting it. This would add another alternative to { and } for fixing up a command line. * some missing useful VideoTECO/TECO-11 commands: * EF with buffer id * ER command: read file into current buffer at dot * $$, ^C: return from macro * nEW to save a buffer by id * use CRTP for RBTrees * "~" expansion in file names * Buffer ids should be "circular", i.e. interpreted modulo the number of buffers in the ring. This allows "%*" to wrap at the end of the buffer list. * instead of 0EB to show the list of buffers, there should perhaps be a special TAB-completion (^G mode?) that completes only buffers in the ring. It should also display the numeric buffer ids. * properly support Unicode encodings and the character-based model * link against libncursesw if possible * translate documents to Unicode strings * a position refers to a character/codepoint * Progress indication in commandline cursor * Command to free Q-Register (remove from table) * autocompletion of long Q-Reg names * Q-Register aliasing/linking * TECO syntax highlighting * multiline commandline * perhaps use Scintilla view as mini buffer * improve GTK interface * backup files, or even better Journal files: could write a Macro file for each modified file containing only basic commands (no loops etc.). it is removed when the file is saved. in case of an abnormal program termination the journal file can be replayed. This could be done automatically in the profile. * Add special Q-Register for dot: Would simplify inserting dot with string building and saving/restoring dot on the QReg stack * automatic EOL detection of buffers; easy EOL setting * command to change the current working directory. This will influence tab-completion and relative file names. * exclusive access to all opened files/buffers (locking): SciTECO will never be able to notice when a file has been changed externally. Also reversing a file write will overwrite any changes another process could have done on the file. Therefore open buffers should be locked using the flock(), fcntl() or lockf() interfaces. On Windows we can even enforce mandatory locks. * Perhaps we should evaluate $COLORTERM on Curses to automatically select a monochrome Curses color scheme. Optimizations: * C++14 is supported by GCC 5 and supports new() and delete() operators with a size argument. Replacing these operators with versions using g_slice_alloc() and g_slice_free() should speed up things, especially Q-Register handling and the undo stack. * Scintilla: SETDOCPOINTER resets representations, so we have to set SciTECO representations up again often * commonly used (special) Q-Registers could be cached, saving the q-reg table lookup * refactor search commands (create proper base class) * refactor match-char state machine using MicroStateMachine class * simplify parser (static jump tables are unnecessary!) * search and other commands can be significantly optimized: in batch mode, or in loops/macros there is no need to rematch every character! -> immediate vs. non-immediate command execution * can be handled automatically in StateExpectString * batch mode can be optimized by preventing unnecessary allocations/deallocations for UNDO token creation. Check for undo.enabled in constructors like undo.push_msg|var() where the undo token destruction does not have any significant side effects. * use "friend" functions for C-linkage callbacks that must access a class' member instead of making that member public. Alternatively, I can use public context structures that are private attributes. Documentation: * Code docs (Doxygen) * clean up/fix generate-docs.tes