aboutsummaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2015-03-02updated documentation: cover undo/redo, the new ^G editing command and ↵Robin Haberkorn2-13/+123
removal of ^T
2015-03-02introduced the ^G immediate editing command for toggling the undo/redo mode ↵Robin Haberkorn2-88/+163
(also replaces ^T) * CTRL+G toggles the behaviour of the rubout (Backspace, ^W, ^U) commands: When the so called immediate editing command modifier is enabled/active, the rubout commands will do the opposite and insert from the rubbed out command line. This command is somewhat similar to Emacs' C-g command. * The CTRL+G command also replaces the ^T immediate editing command for auto-completing filenames in any string argument. Now the TAB key can be used for that purpose after activating the ^G modifier. ^T is a classic TECO command that will be supported sooner or later by SciTECO, so it's good to have it available directly.
2015-03-01keep rubbed out command line for later re-insertion and massive Cmdline ↵Robin Haberkorn15-295/+493
cleanup/refactoring * characters rubbed out are not totally removed from the command line, but only from the *effective* command line. * The rubbed out command line is displayed after the command line cursor. On Curses it is grey and underlined. * When characters are inserted that are on the rubbed out part of the command line, the cursor simply moves forward. NOTE: There's currently no immediate editing command for reinserting the next character/word from the rubbed out command line. * Characters resulting in errors are no longer simply discarded but rubbed out, so they will stay in the rubbed out part of the command line, reminding you which character caused the error. * Improved Cmdline formatting on Curses UI: * Asterisk is printed bold * Control characters are printed in REVERSE style, similar to what Scinterm does. The controll character formatting has thus been moved from macro_echo() in cmdline.cpp to the UI implementations. * Updated the GTK+ UI (UNTESTED): I did only, the most important API adaptions. The command line still does not use any colors. * Refactored entire command line handling: * The command line is now a class (Cmdline), and most functions in cmdline.cpp have been converted to methods. * Esp. process_edit_cmd() (now Cmdline::process_edit_cmd()) has been simplified. There is no longer the possibility of a buffer overflow because of static insertion buffer sizes * Cleaned up usage of the cmdline_pos variable (now Cmdline::pc) which is really a program counter that used a different origin as macro_pc which was really confusing. * The new Cmdline class is theoretically 8-bit clean. However all of this will change again when we introduce Scintilla views for the command line. * Added 8-bit clean (null-byte aware) versions of QRegisterData::set_string() and QRegisterData::append_string()
2015-03-01moved String helper functions from sciteco.h and main.cpp to ↵Robin Haberkorn11-72/+154
string-utils.cpp and string-utils.h * also improved performance of String::append() by using g_realloc() * added String::append() variant for non-null-terminated strings
2015-02-23implemented to undo stack memory limitingRobin Haberkorn12-34/+241
* 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-21throw error instead of assertion when loop is closed (>) or continued (F>) ↵Robin Haberkorn1-2/+9
without a corresponding loop start (<) * assertions were introduced very early when there was no proper error handling in SciTECO. However it points to a macro programming error instead of a SciTECO programming error and should not crash the editor. * Perhaps it would be best to check for this kind of "syntax" error also in parse-only modes. This is not done currently. * part of the solution to issue #3
2015-02-21fixed assertion in search.cppRobin Haberkorn1-1/+1
2015-02-19fixup: work around Scintilla drawing bug also when undoing Q-Reg editRobin Haberkorn1-0/+8
2015-02-19work around Scintilla character representation drawing bugRobin Haberkorn1-0/+16
* since SCI_SETDOCPOINTER resets character representations (should probably be submitted as a bug to Scintilla) we have to reset the representations each time we load a q-register into the q-reg view. * since the SCI_SETREPRESENTION call does not do any redrawing (and it would be very slow if it did), the lines with control characters were laid out wrong (too much spaces). This happened when editing a q-reg or the command-line. * Since it is not obvious how to fix Scintilla's behaviour here, we work around the issue by temporarily disabling the layout cache.
2015-02-18added session.hg and session.vcs macrosRobin Haberkorn3-4/+23
* session.hg sets up the buffer session in the current Mercurial repository * session.vcs is a convenience macro that may be used in profiles to enable buffer sessions per repo for all supported VCS (Git, Hg and SVN)
2015-02-18Merge branch 'master' of github.com:rhaberkorn/scitecoRobin Haberkorn2-3/+19
2015-02-17added session.svn macro to set up a session profile in the current ↵Robin Haberkorn2-3/+19
Subversion working copy * it uses "svn info --xml" since otherwise the output of "svn info" might be localized.
2015-02-14updated Scintilla submodule: fixed tab stop calculation on CursesRobin Haberkorn10-11/+10
* also did some whitespace cleanup in SciTECO now that tabs are displayed properly
2015-02-12updated Scintilla to v3.5.2 and Scinterm to v1.5Robin Haberkorn2-4/+10
the most noticable change is that a scroll-bar is displayed by default (Curses UI) * INSTALL instructions updated
2015-02-11updated copyright to 2015Robin Haberkorn41-42/+42
2015-02-11updated TODORobin Haberkorn1-0/+7
2015-02-11implemented support for different indention stylesRobin Haberkorn4-23/+103
* the ^I command was altered to insert indention characters rather than plain tabs always. * The <TAB> immediate editing command was added for all insertion arguments (I, ^I but also FR and FS) * documentation was extended for a discussion of indention
2014-12-15fixup: the spawn context's GError must not be memory-managed by the state objectRobin Haberkorn1-4/+0
this is because ownership of the GError may be passed to GlibError()
2014-12-15always free glib's GError structuresRobin Haberkorn3-2/+17
* when throwing GlibError(), this is taken care of automatically. * fixes a memleak since there may be resources associated with the GError.
2014-12-15add workaround for missing g_spawn_check_exit_status() in libglib v2.33 and ↵Robin Haberkorn1-0/+41
earlier * Debian 7 is still at libglib v2.33 and since it should be supported, I reimplemented the missing function (UNIX-only). * This workaround can be removed once libglib v2.34 becomes common place. Closes #2
2014-12-15updated TODORobin Haberkorn1-3/+11
2014-12-15fixed remaining reference to register "0" in the documentationRobin Haberkorn1-1/+1
2014-12-15fixed globbing of non-existing directoriesRobin Haberkorn1-0/+4
* for non-existing directories, NULL was passed to g_dir_read_name(). This resulted in Glib errors being printed to stdout/stderr. * this was broken in commit 427c9d
2014-12-09updated README: elaborate on supported platforms, libraries and featuresRobin Haberkorn1-8/+37
2014-12-09support filename auto completions with forward-slash directory separators on ↵Robin Haberkorn2-4/+64
Windows * this is actually UNTESTED on Windows
2014-12-09Curses: support cycling through long lists of possible auto-completions and ↵Robin Haberkorn7-70/+162
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-12-08Curses: fixed formatting of popup windowsRobin Haberkorn1-24/+20
* simplified code * fixed spurious empty lines in the popup which truncated file names/tokens that would otherwise be displayed * fixed memleak when freeing the popup entry list
2014-12-08do not show possible completions for hidden files and directoriesRobin Haberkorn4-12/+64
* added platform-dependant file_is_visible() function
2014-11-24allow disabling of buffer sessions. in sample.teco_ini, disable sessions ↵Robin Haberkorn2-8/+12
automatically when files are given. this allows you to use sciteco in a Git repository to edit a specific file, without changing the buffer session. Also useful if SciTECO is used as the GIT_EDITOR without thrashing the repository's session every time a commit message is edited.
2014-11-24implemented pQq and :Qq commandsRobin Haberkorn4-26/+116
2014-11-24fixed standard library installationRobin Haberkorn1-1/+4
2014-11-24updated TODORobin Haberkorn1-7/+10
2014-11-24introduced $SCITECOCONFIG env variable, and set different default for ↵Robin Haberkorn9-54/+76
$SCITECOPATH on Windows * $SCITECOCONFIG has been introduced, so have a macro-accessible location for the profile, buffer session etc. This is set to the program dir on Windows. That way, the config files will be found, regardless of the current working dir, but it may also be set up for Unix-like environments on Windows. * $SCITECOPATH defaults to the program dir + "/lib" now on Windows. * The default profile is now always called ".teco_ini". Also on Windows. Platform differences like this would need to be documented. * The sample teco.ini has been renamed to "sample.teco_ini" for clarity
2014-11-24use RBTree::RBEntry instead of only RBEntryRobin Haberkorn1-1/+1
minor change that fixes Doxygen-generated documentation
2014-11-24turn off Scintilla undo collection by default and fixed memleakRobin Haberkorn6-10/+45
* in batch mode, Scintilla undo actions are simply leaked memory * Since we have more than one Scintilla view now, we must empty the undo buffer of all scintilla views when a command line is committed ($$)
2014-11-24mention .teco_session files in sciteco(1)Robin Haberkorn1-1/+8
2014-11-24Q-Register loading and saving using the IOView classRobin Haberkorn7-27/+96
* EW can save Q-Registers now * the new E% may be used to save a q-register without making it the current document
2014-11-24factored out file loading and saving into the View specialisation IOViewRobin Haberkorn6-382/+475
this will allow us to use the same algorithms for loading and saving Q-Registers (from/to file). * Saving with EW when a Q-Reg is edited has been fixed (was broken earlier) * SciTECO save point files are now named .teco-X-BASENAME When using IOView for Q-Regs, there will be no way to sensible count the save points. Each write of a Q-Reg may be to another file. Therefore, we number save-points globally. If the sequence of writes has to be reconstructed manually, one can still look at the save point files' modification dates * give more informative error messages when saving a file fails
2014-11-23updated Doxygen configuration: doxygen -u Doxyfile.inRobin Haberkorn1-74/+153
2014-11-22updated lexer and session libraries using new EU, [* and ]* commandsRobin Haberkorn2-23/+21
2014-11-22added EI as non-string-building variant of IRobin Haberkorn2-7/+30
this is analoguous to EU as the string-build equivalent of ^U.
2014-11-22added variant of the ^U command with string building: the EU commandRobin Haberkorn3-7/+45
it became apparent, that something like this is very useful, when constructing the contents of a q-register without editing it. I have decided against introducing another modifier for toggling string building. Most commands have string building enabled and it doesn't hurt. For the few exceptions, an alternative variant can be introduced.
2014-11-22allow setting the "*" register as an alternative to nEBRobin Haberkorn6-19/+45
this is more consistent with SciTECO's idea of abstract registers and allows the currend buffer to be saved on the Q-Register stack. This allows the idiom: [* ! ...change current buffer... ! ]*
2014-11-22removed SciTECO-specific ignores from .gitignoreRobin Haberkorn1-5/+0
these should be put by the user in his/her global or repository-specific ignore patterns
2014-11-22added a buffer session module (session.tes)Robin Haberkorn3-9/+64
This is a simple and straight-forward implementation of buffer sessions in SciTECO. A session is merely a SciTECO script that opens files when executed (and restores properties). The current session is identified by this script's filename in Q-Register "session.path": ~/.teco_session by default. Users may set "session.path" to manage different profiles. An abstraction of session "names" is not provided. Users are expected to hack these on their own. For the common task of having one session per profile, the "session.git" macro is provided. It set's up the current session relative to the current Git repository. This will create ".teco_session" files in the root of Git repositories, that may be added to a global ignore pattern (or they may even be versioned!)
2014-11-22added EJ command: return runtime propertiesRobin Haberkorn3-0/+74
* main motivation is to have a way of getting the number of buffers in the ring. "EJ" or "1EJ" will do that. This simplifies macros that will have to iterate all the buffers. They no longer have to close the existing buffers to do that. * "0EJ" will get the current user interface. This is useful to select a different color scheme in the startup profile depending on the UI, for instance.
2014-11-22added globbing command ENRobin Haberkorn15-74/+244
* implements the same globbing as the EB command already did * uses Globber helper class that behaves more like UNIX glob(). glib only has a glob-style pattern matcher. * The Globber class may be extended later to provide more UNIX-like globbing. * lexer.tes has been updated to make use of globbing. Now, lexers can be automatically loaded and registered at startup. To install a new lexer, it's sufficient to copy a file to the lexers/ directory.
2014-11-22fixed document parameters when editing local q-registers (must_undo)Robin Haberkorn1-1/+6
2014-11-21updated documentation on ED (buffer editing) hooksRobin Haberkorn2-14/+58
2014-11-21finally implemented the CLOSE and QUIT hooksRobin Haberkorn8-44/+151
the QUIT hook is actually not that trivial and required some architectural changes. First, the QUIT hook execution and any error that might occurr cannot always be attached to an existing error stack frame. Thereforce, to give a stack frame for QUIT hooks and to improve the readability of error traces for ED hooks in general, a special EDHookFrame is added to every ED hook execution error. Secondly, since QUIT hooks can themselves throw errors, we cannot run it from an atexit() handler. Instead it's always called manually before __successful__ program termination. An error in a QUIT hook will result in a failure return code nevertheless. Thirdly, errors in QUIT hooks should not prevent program termination (in interactive mode), therefore they are only invoked from main() and always in batch mode. I.e. if the interactive mode is terminated (EX$$), SciTECO will switch back to batch mode and run the QUIT hook there. This is also symmetric to program startup, which is always in batch mode. This means that Interface::event_loop() no longer runs indefinitely. If it returns, this signals that the interface shut down and batch mode may be restored by SciTECO.