aboutsummaryrefslogtreecommitdiffhomepage
path: root/TODO
AgeCommit message (Collapse)AuthorFilesLines
2016-02-16finally added Autotest suiteRobin Haberkorn1-3/+0
* Autotest ships with Autoconf, so it's available already and relatively easy to integrate into an Autotools package. * This is attached to `make check` using some Automake magic. * The test suite will only call the built SciTECO for the time being. But using tests/Makefile.am, custom programs could be easily built. * Since it uses the target sciteco, it cannot work in cross-compile environments. * The test suite tests/testsuite.at should be used for regression tests at least: Whenever there is a bug, a test case should be added to testsuite.at. Later this might be split up into multiple includes for regressions other tests.
2016-02-16implemented ^C commandRobin Haberkorn1-2/+0
* acts like exit(3) -- ie. the program is terminated immediately but the quit hook (aka SciTECO's atexit() handlers) will still run. * for "compatibility" with classic TECOs. Can also be used as a shorter variant of "-EX$$" but working from every macro level. * disallowed in interactive mode to avoid typing it accidentally.
2016-02-15updated TODORobin Haberkorn1-13/+16
2016-02-11pass user/maintainer provided CXXFLAGS to the Scintilla build processRobin Haberkorn1-3/+0
* Usually, Scintilla will now be built with -O2 * this can improve performance significantly over the standard Scintilla -Os (up to 10%). * this also allows link-time-optimizing both Scintilla and SciTECO (which are linked statically) by adding -flto to CFLAGS, CXXFLAGS and LDFLAGS. Link-time-optimization will both reduce the total binary size and improve performance slightly since scintilla_send_message() can be inlined. An -O3 optimized Scintilla when linked with LTO results in an only 300kb larger SciTECO binary. * the highest possible optimization thus requires the following maintainer flags on the ./configure command line: CFLAGS="-O3 -mtune=native -march=native -flto" CXXFLAGS="-O3 -mtune=native -march=native -flto" LDFLAGS="-flto" * Windows and Debian builds use link-time-optimization now. On Windows - where we link in everything statically - building the dependant libraries with -flto could improve performance even more. * Debian builds respect the default hardening flags of the build server now. This should ensure that SciTECO is built for the correct architecture at the recommended optimization level etc.
2016-02-11optimized command execution in batch mode, during macro calls, loops etc.Robin Haberkorn1-6/+0
* SciTECO commands are implemented with immediate execution in mind. Those commands that do need to execute immediately while a string command is entered, can do so using StateExpectString::process(). For simplicity, the parser just assumed that every input character should result in immediate execution (if the command supports it of course). * This lead to unnecessarily slow execution of commands like <I> or <S> in batch mode. E.g. a search was always repeated for every character of the pattern - a N character pattern could result in N searches instead of one. Also in interactive mode when executing a macro or repeating commands in a loop, immediate processing of string arguments is unnecessary and results in superfluous undo tokens. * These cases are all optimized now by being informed about the necessity of providing immediate feedback via State::refresh(). This is used by StateExpectString to defer calling process() as long as possible. * For states extending StateExpectString, there is no change since they can already process arbitrarily long strings. The optimization is hidden in StateExpectString. * some allocations are now also avoided in StateExpectString::custom().
2016-02-10avoid unnecessary undo token allocations in batch mode: greatly speeds up ↵Robin Haberkorn1-7/+3
batch mode * by using variadic templates, UndoStack::push() is now responsible for allocating undo tokens. This is avoided in batch mode. * The old UndoStack::push(UndoToken *) method has been made private to avoid confusion around UndoStack's API. The old UndoStack::push() no longer needs to handle !undo.enabled, but at least asserts on it. * C++11 support is now required, so variadic templates can be used. This could have also been done using manual undo.enabled checks; or using multiple versions of the template with different numbers of template arguments. The latter could be done if we one day have to support a non-C++11 compiler. However since we're depending on GCC 4.4, variadic template use should be OK. Clang supports it since v2.9. * Sometimes, undo token pushing passed ownership of some memory to the undo token. The old behaviour was relied on to reclaim the memory even in batch mode -- the undo token was always deleted. To avoid leaks or repeated manual undo.enabled checking, another method UndoStack::push_own() had to be introduced that makes sure that an undo token is always created. In batch mode (!undo.enabled), this will however create the object on the stack which is much cheaper than using `new`. * Having to know which kind of undo token is to be pushed (taking ownership or not) is inconvenient. It may be better to add static methods to the UndoToken classes that can take care of reclaiming memory. * Benchmarking certain SciTECO scripts have shown 50% (!!!) speed increases at the highest possible optimization level (-O3 -mtune=native -march=native).
2016-02-06updated TODORobin Haberkorn1-2/+15
2016-01-31updated to Gtk+ 3 and revamped the Gtk interface's popup widgetRobin Haberkorn1-1/+0
* depend on Gtk+ 3.10. If necessary older versions should also be supportable. GtkOverlay was already introduced in v3.2 * A fallback for GtkFlowBox is compiled in if the Gtk installation is too old. This applies even to Ubuntu 14.04 which still runs Gtk v3.10. * the threading the Gtk UI is left as it is for the time being even though the synchronization mechanism has been deprecated. Alternative approaches have to be tried out and benchmarked. * Completely revamped the GtkInfoPopup widget. It is now as powerful as the Curses UI's popup widget. * A GtkOverlay is used instead of the top-level window hack in the Gtk2 version. * GtkFlowBox is used to lay out the columns of the popup. * I had to work around restrictions of GtkScrolledWindow by writing my own poor-mans scrolled window which handles size requests correctly. * The popup window no longer overflows the screen size, instead we scroll. * Scrolling pagewise is finally supported. Wraps at the end of a list just like the Curses UI. * Instead of using only two stock icons, we now use GIO to get file and directory icons for the current theme. This looks even better. * The GtkFlowBox allows selections which can be used for mouse interaction later. But this is not yet implemented. * Theming of the popup widget and command line is still not performed correctly.
2016-01-28updated TODO on possible optimizationsRobin Haberkorn1-0/+9
2015-09-23updated TODORobin Haberkorn1-6/+66
2015-06-30updated TODORobin Haberkorn1-25/+60
2015-05-25updated TODORobin Haberkorn1-5/+5
2015-03-18updated TODOv0.6.4Robin Haberkorn1-0/+4
2015-03-17updated TODORobin Haberkorn1-0/+34
2015-03-16implemented automatic EOL translation supportRobin Haberkorn1-2/+8
* activated via bit 4 of the ED flag (enabled by default) * automatic EOL guessing on file loading and translation to LFs. * works with files that have inconsistent EOL sequences. * automatic translation to original EOL sequences on file saving * works with inconsistent EOL sequences in the buffer. This should usually not happen if the file was read in with automatic EOL translation enabled. * also works with the EC and EG commands * performance is OK, depending on the file being translated. When reading files with UNIX EOLs, the overhead is minimal typically-sized files. For DOS EOLs the overhead is larger but still acceptable. * Return (line feed) is now an immediate editing command. This centralizes EOL sequence insertion. Later, other features like auto-indent could be added to the editing command. * get_eol() has been moved to main.cpp (now called get_eol_seq() * Warn if file ownership could not be preserved when saving files. * IOView has been almost completely rewritten based on GIOChannels. The EOL translation code is also in IOView.
2015-03-12updated TODORobin Haberkorn1-7/+15
2015-03-07updated TODORobin Haberkorn1-3/+23
2015-03-02updated TODORobin Haberkorn1-9/+11
2015-02-23implemented to undo stack memory limitingRobin Haberkorn1-1/+0
* acts as a safe-guard against uninterrupted infinite loops or other operations that are costly to undo in interactive mode. If we're out of memory, it is usually too late to react properly. This implementation tries to avoid OOMs due to SciTECO behaviour. We cannot fully exclude the chance of an OOM error. * The undo stack size is only approximated using the UndoToken::get_size() method. Other ways to measure the exact amount of allocated heap (including size fields in every heap object or using sbrk(0) and similar) are either costly in terms of memory or platform-specific. This implementation does not need any additional memory per heap object or undo token but exploits the fact that undo tokens are virtual already. The size of an undo token is determined at compile time. * Default memory limit of 500mb should be OK for most people. * The current limit can be queried with "2EJ" and set with <x>,2EJ. This also works interactively (a bit tricky!) * Limiting can be disabled. In this case, undo token processing is a bit faster. * closes #3
2015-02-14updated Scintilla submodule: fixed tab stop calculation on CursesRobin Haberkorn1-1/+0
* also did some whitespace cleanup in SciTECO now that tabs are displayed properly
2015-02-11updated TODORobin Haberkorn1-0/+7
2014-12-15updated TODORobin Haberkorn1-3/+11
2014-12-09Curses: support cycling through long lists of possible auto-completions and ↵Robin Haberkorn1-2/+0
optimized screen refreshing/redrawing * pressing e.g. TAB when the popup is showing a list of auto-completions will show the next page, eventually beginning at the first one again. * do not redraw curses windows in the UI methods directly. this resulted in flickering during command-line editing macros and ordinary macro calls because the physical screen was updated immediately. Instead, window refreshing and updated is done centrally in event_loop_iter() only after a key has been processed. Also we use wnoutrefresh() and doupdate() to send as little to the terminal (emulator) as possible.
2014-11-24updated TODORobin Haberkorn1-7/+10
2014-11-17updated TODORobin Haberkorn1-4/+1
2014-11-11refactored SciTECO runtime errors: moved from parser.cpp to error.cppRobin Haberkorn1-1/+0
* the GError expection has been renamed to GlibError, to avoid nameclashes when working from the SciTECO namespace
2014-11-10updated TODORobin Haberkorn1-1/+3
2014-11-09documented EC and EG commandsRobin Haberkorn1-2/+0
2014-11-02changed syntax for long Q-Register names: use [] brackets instead of {}Robin Haberkorn1-1/+0
this breaks many existing scripts, and means you may have to rebuild SciTECO with ./configure --enable-bootstrap The syntax of SciTECO might change in backwards-incompatible until version 1.0 is released.
2014-11-01fixed reversing EW (save as)Robin Haberkorn1-1/+1
when the file name changes, there will no longer be a use-less save point file. instead the new file is deleted upon rubout. * save points are properly created if a file already exists with the same name, even though it was not known to SciTECO before the save. (e.g. you do save-as to a file that already exists). * more effects of the save command can now be rubbed out correctly
2014-08-02ensure that expressions.eval(true) pops the brace "operator"Robin Haberkorn1-1/+0
test case: 1<()> * an empty brace (or content that does not leave anything on the stack) resulted in the brace op to be left on the stack which makes the op stack inconsistent
2014-02-18removed unreliable CHR2STR() macroRobin Haberkorn1-2/+0
* referencing temporaries is unreliable/buggy in GNU C++, at least since v4.7 * in higher optimization levels it resulted in massive memory corruptions * this is responsible for the build issues (PPA build issues) * instead, always declare a buffer on the stack which guarantees that the variable lives long enough * the g_strdup(CHR2STR(x)) idiom has been replaced with String::chrdup(x)
2014-02-16updated minimum required Scintilla version to v3.3.7 / Scinterm v1.2Robin Haberkorn1-0/+1
* allows us to remove most patches. One however is still necessary (Scinterm Makefile bug!) * TECO-style control code echoing is now set up using the SCI_SETREPRESENTATION message * updated copyrights * updated TODO
2014-02-15updated TODORobin Haberkorn1-1/+5
2013-07-25updated TODO: reversing EWfilename$ (save as) is brokenRobin Haberkorn1-0/+1
2013-07-23updated TODORobin Haberkorn1-0/+1
2013-07-05updated TODORobin Haberkorn1-1/+9
2013-03-16updated TODO: written language referenceRobin Haberkorn1-2/+1
2013-03-16updated TODORobin Haberkorn1-5/+9
2013-02-22updated TODO: Optimizations sectionRobin Haberkorn1-3/+7
2013-02-14updated TODORobin Haberkorn1-0/+2
2013-02-14updated TODO: long-q-reg names implementedRobin Haberkorn1-4/+2
2013-02-08updated TODORobin Haberkorn1-2/+13
2013-02-08updated TODO: implemented "{" and "}" commandsRobin Haberkorn1-1/+0
2013-01-29updated TODORobin Haberkorn1-0/+4
2013-01-22fixed: macro program counter is fixed after error occurred while executing ↵Robin Haberkorn1-2/+2
commandline fixes errors in loops or loop interruptions (may leave program counter somewhere in the loop)
2013-01-21fixed: preserve access mode and ownership (if possible) of file when savingRobin Haberkorn1-1/+4
* works with/without save-points (i.e. in batch and interactive mode, both were broken) * improved file-saving performance (avoid buffer gap removal) * only root can preserve the ownership of a file owned by another user after file saving
2013-01-20added manpage highlighting program invocation and batch modeRobin Haberkorn1-1/+0
language and commands will be described in separate documents
2013-01-20fixed search-replace commands if search fails (do not insert then)Robin Haberkorn1-3/+7
* updated TODO
2013-01-20added patch enabling TECO-style (^X) control code echoing in ScintillaRobin Haberkorn1-1/+1
in the future, I might submit a more elaborate Scintilla patch for configuring the control code strings.