aboutsummaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2023-07-02added FreBSD port (for ports tree)Robin Haberkorn5-0/+236
* it is supposed to be mainstreamed, but this did not yet happen * even if it will eventually become part of the ports tree, I won't have access to this repo and could not keep it up to date. But I can keep this copy here up to date and it can serve as an upstream source for the ports tree maintainer. * Also, it can be used to build FreeBSD binary packages even now without being part of the official ports tree.
2023-07-02cheat-sheet.mm: minor improvementsRobin Haberkorn1-3/+2
2023-06-28added cheat sheetRobin Haberkorn4-2/+821
* This is supposed to allow new users without any prior exposure to SciTECO to pick up the basics of practical usage of SciTECO as an editor. It almost does not elaborate on scripting-side of things. * This requires a full Groff installation, so the document is not built by default.
2023-06-20Debian: fixed rules (build and binary targets)Robin Haberkorn1-2/+33
* dh_testdir would sometimes cause problems on the PPA servers, so we replaced it with an empty rule. * We need to define the binary-arch and binary-indep targets in order to recurse into the correct subdirectories. I do not understand why this always worked on the Github runner and sometimes even on the PPA servers. Unfortunately, we cannot just call `dh binary-arch -B... -p...` since that would call `dh_install -a` which overrides any `-p` (package), thus trying to install the curses binaries from the Gtk build directory and vice versa.
2023-06-20Debian: updated/modernized config filesRobin Haberkorn3-13/+39
* This resolves must lintian warnings and errors.
2023-06-20fixup 75533443ecae81d6861bdc1402a0e4b271838979: fixes sciteco-gtk Debian ↵Robin Haberkorn1-1/+1
packages
2023-06-19updated ChangeLog for v2.0.0 and TODOv2.0.0Robin Haberkorn2-13/+227
2023-06-19distribute sciteco.desktopRobin Haberkorn3-4/+3
* Useful for packaging on platforms where we can only build from tarballs (FreeBSD) * I don't know whether it's always safe and correct to install this file into $DATADIR/applications, so the file is only distributed but not installed yet. * It contains a hardcoded binary name "gsciteco". This could actually differ depending on the concrete --program-prefix and it would be good to include the exact installation path. This however is not possible as long as we do not install this file.
2023-06-19the SciTECO data installation path is now configurable via --with-scitecodatadirRobin Haberkorn8-21/+26
* This is also the base of $SCITECOPATH. * Changing it is useful for packaging where it is not possible to factor out the common files between Curses and Gtk builds into a "sciteco-common" package. As an alternative, you can now create disjunct sciteco-curses and sciteco-gtk packages. * You will most likely want to use this for Gtk builds as in: --with-interface=gtk --program-prefix=g --with-scitecodatadir=/usr/local/share/gsciteco.
2023-06-18.teco_ini: don't set up any margins or indention settings on the unnamed bufferRobin Haberkorn1-0/+1
* The lexer.test.* macros don't work on the unnamed buffer, so any per-language indention settings etc. could be accidentally applied to the unnamed buffer.
2023-06-18fixed caret scrolling on startupRobin Haberkorn2-91/+93
* Since Scintilla no longer automatically scrolls the caret (see 941f48da6dde691a7800290cc729aaaacd051392), the caret wouldn't always end up in the view on startup. * Added teco_interface_refresh() which includes SCI_SCROLLCARET and is invoked on startup. This helps with the Curses backend. It also reduces code redundancies. * On Gtk, the caret cannot be easily scrolled on startup as long as no size is allocated to the window, so we also added a size-allocate callback to the window's event box. Sizes are less often allocated to the event box than to the window itself for some strange reason.
2023-05-14resolved warning in gtk-label.c due to wrong enum typeRobin Haberkorn1-1/+1
* This probably did not cause any bugs.
2023-05-14FreeBSD: fixed the poll-thread memory limiting implementation - it's the ↵Robin Haberkorn2-7/+22
default now * On FreeBSD both the dlmalloc replacement and poll-thread via sysctl() work but the poll-thread has been benchmarked to be significantly faster, at least on my machine. You can still ./configure --enable-malloc-replacement of course. * Interestingly, the RSS of the process visible via htop does not decrease after OOMs or command-line terminations - with neither of the implementations.
2023-05-14FreeBSD: fixed test suiteRobin Haberkorn2-3/+5
* it appears to behave similar to Mac OS with regard to recursions
2023-05-12fixup EC on Win32 and interruptions via CTRL+CRobin Haberkorn1-33/+82
* This especially fixes spawning on 0,128ED-mode broken since f557af9a9112955d3b65f6ad0d54c0791189f961. * The process is added to a job object now, which allows us to kill the entire process tree. Previously we we were leaving around orphaned processes.
2023-05-09fixup: building on UNIXRobin Haberkorn1-1/+1
2023-05-09fixed CTRL+C interruptions on Windows; optimized CTRL+C polling on Gtk+Robin Haberkorn6-89/+126
* teco_interrupt() turned out to be unsuitable to kill child processes (eg. when <EB> hangs). Instead, we have Win32-specific code now. * Since SIGINT can be ignored on UNIX, pressing CTRL+C was not guaranteed to kill the child process (eg. when <EB> hangs). At the same time, it makes sense to send SIGINT first, so programs can terminate gracefully. The behaviour has therefore been adapted: Interrupting with CTRL+C the first time will kill gracefully. The second time, a more agressive signal is sent to kill the child process. Unfortunately, this would be relatively tricky and complicated to do on Windows, so CTRL+C will always "hard-kill" the child process. * Moreover, teco_interrupt() killed the entire process on Windows when called the second time. This resulted in any interruption to terminate SciTECO unexpectedly when tried the second time on Gtk/Win32. * teco_sigint_occurred renamed to teco_interrupted: There may be several different sources for setting this flag. * Checking for CTRL+C on Gtk involves driving the main event loop repeatedly. This is a very expensive operation. We now do that only every 100ms. This is still sufficient since keyboard input comes from humans. This optimization saves 75% runtime on Windows and 90% on Linux. * The same optimization turned out to be contraproductive on PDCurses/WinGUI.
2023-04-29fixed <EC> interruptions on Gtk+ (and probably on PDCurses/Win32)Robin Haberkorn2-6/+30
* test case: ECwhile true; do true; done$ * Some platforms require polling via teco_interface_is_interrupted() for detecting interruptions, so we added an idle watcher to the Glib event loop in spawn.c. * On platforms that do not require polling key presses (like Unix/ncurses), the idle watcher won't do any harm.
2023-04-27Gtk: fixed scrolling in the command line widgetRobin Haberkorn1-7/+2
* The caret wasn't always kept out of the UZ and at some point would totally leave the view. This was apparently cause by executing two SCI_SCROLLCARETs per teco_interface_cmdline_update(). * Instead, we now use a CARET_EVEN scroll policy which also works sufficiently well.
2023-04-27Gtk: fixed entering dead keysRobin Haberkorn1-25/+63
* This is using an Input Method now. * Entering dead keys has probably always been broken in Gtk which I only did not notice because I use a keyboard layout without dead keys. This affects the ^ and ` keys on a German layout. * Once we support Unicode input, it would make sense to abuse Scintilla's already existing input method support. Unfortunately, forwarding keyboard events to the Scintilla view breaks event freezing and results in flickering.
2023-04-20Curses: do not allow typing any non-ASCII characters - fixes crashes on ↵Robin Haberkorn1-1/+1
PDCurses/WinGUI * we can neither display, nor parse Unicode characters properly, so this does not worsen anything * makes it harder to confuse the parser as long as we do not support Unicode. * behaves like on Gtk: pressing a non-ASCII char will simply be ignored * Most importantly, this fixes crashes on PDCurses/WinGUI. It apparently couldn't handle the negative integers that resulted from passing a value >= 0x80 <= 0xFF into gchar (which is a signed integer). Changing everything into guchar is not worth the effort - we need full Unicode support anyway.
2023-04-19fixup: reverted the last Scintilla patch and unref Scintilla objects via ↵Robin Haberkorn2-9/+1
g_object_unref() * Turns out that using gtk_widget_destroy(), the finalize handler never gets called!? This means we were leaking memory. * Using g_object_unref() fixes that and the initial Scintilla patch is no longer necessary. * There have previously been use-after-free bugs when *not* using gtk_widget_destroy(). This has apparently been fixed in the meantime in Scintilla.
2023-04-19updated Scintilla: fixes crashes and warnings on startup with Gtk+Robin Haberkorn1-0/+0
* the GObject lifecycle was violated, resulting in use-after-free scenarios
2023-04-18fixup a6b5394086260c262e393dd113057916fd14134b: emit undo tokens for insert_lenRobin Haberkorn1-11/+14
* Turns out it is impossible - or at least very tricky - to avoid undo token emission for insert_len. I therefore opt for stability rather than saving memory. * The old workaround introduced in a6b5394086260c262e393dd113057916fd14134b would actually fail if you do not rub out the string argument completely after interruption. I.e. You type <Ihello^J$>, interrupt - insert_len may be != 0 at this point - and _partially_ rubout the insert-command and continue typing. This could still crash the editor.
2023-04-18no longer try to avoid automatic scrolling - this is patched out of ↵Robin Haberkorn9-53/+33
Scintilla now * The patch avoids all automatic scrolling consistently, including in SCI_UNDO. This speads up Undo (especially after interruptions). * Also, the patch disables a very costly and pointless (in SciTECO) algorithm that effectively made <Ix$> uninterruptible. * Effectively reverts large parts of 8ef010da59743fcc4927c790f585ba414ec7b129. I have never liked using unintuitive Scintilla messages to avoid scrolling.
2023-04-16added Asciidoc lexer configRobin Haberkorn2-1/+30
2023-04-16updated Scintilla to v5.3.4, Scinterm to v4.1 and Lexilla to v5.2.4Robin Haberkorn7-4/+543
* actually everything is updated to their current HEADs but the aforementioned versions are close. * Scintilla uses threads now, so we added checks for pthread. To be on the safe side, we imported AX_PTHREAD from the Autoconf archives. The flags are kept out of the ordinary build system, though and used only for compiling Scintilla and for linking. SciTECO may also use threads, but via Glib. * Scinterm removed SCI_COLOR_PAIR(), so we re-added it to src/interface-curses/interface.c. * There is an Asciidoc lexer now. * The <Ix$> interruption bug (see TODO) is not fixed by this upgrade. Perhaps the Mac OS version runs better now. Feedback is needed (refs #12).
2023-04-16fixed interruptions of commands with string arguments in interactive modeRobin Haberkorn1-4/+12
* In order to provoke this bug, there must be a loop with a string command. For instance <Ifoobar^J$>. When interrupting this loop, ctx->expectstring.insert_len might end up > 0. This breaks an optimization that avoids undo tokens for insert_len since it is usually reset to 0 after every keypress. Once you rubout everything and retype `I`, you can crash SciTECO. * I am not sure if this solution is ideal. An alternative might be adding teco_state_expectstring_initial(), but we would have to chain to it from some child states that have their own initial() callback. Of course, we could also simply teco_undo_gsize(insert_len) at the cost of undo tokens.
2023-04-14allow disabling Lexilla (Lexer) support by specifying --without-lexillaRobin Haberkorn5-86/+104
* This does not make sense for most SciTECO builds, but only when you want to optimize for size as the lexers take up 50% of the compressed binary size. Without Lexilla, it should be possible get it compiled in about 500kb. * It can be useful for instance when building for embedded distributions. * When Lexilla is disabled, symbols-scilexer.c is also not generated (we assume that the Lexilla sources are not available and it also doesn't serve any purpose). * Consequently, most of the lexer configuration scripts are also not installed under --without-lexilla.
2023-04-13cmdline.c: fixed rubbing out words (^W) and possible chrashesRobin Haberkorn2-21/+10
* This would sometimes rub out more than expected due to reading undefined memory. Actually even crashes were not impossible. * This is because SCI_GETWORDCHARS does not null-terminate the buffer it writes but this was assumed. In effect, we could easily read beyond the allocated memory in wchars if there doesn't happen to be a null-char following the buffer. * Consequently, null-chars in word chars were also not supported, although this would hardly trouble anybody. * Instead, we now store the word chars in a teco_string_t which supports non-null-terminated strings natively. Still we null-terminate the string to keep teco_string_t's promises about degrading to null-terminated char *. This is currently not necessary. * teco_is_wordchar() has been replaced by teco_string_contains().
2023-04-13cmdline.c: simplified the rubin-caseRobin Haberkorn2-13/+6
* We no longer need special NULL-values for teco_cmdline_insert(), as teco_cmdline_rubin() will simply take a character from the rubbed-out command line and is equivalent to typing a character from the rubbed-out command-line.
2023-04-13fixed typing in characters of the rubbed-out command-lineRobin Haberkorn1-11/+12
* The rubbed out command line should not be discarded. * This has been broken since 432ad24e382681f1c13b07e8486e91063dd96e2e (C conversion).
2023-04-05fixed nightly Debian/Ubuntu buildsRobin Haberkorn1-1/+1
* Disabled pyTooling/Actions/releaser composite on Ubuntu and use a container instead. The composite step is obviously broken on Ubuntu 20.04.
2023-04-05Nightly Builds: hopefully fixed the Ubuntu buildsRobin Haberkorn1-4/+4
* pyTooling/Actions/releaser/composite updated to v0.4.6
2023-04-05updated copyright to 2023Robin Haberkorn63-63/+63
2023-04-05updated TODORobin Haberkorn1-4/+73
2023-04-05fixed formatting of dates in manpagesRobin Haberkorn1-1/+1
* The last digit of the year was cut off. This was an artifact from the time that <EG> was used for inserting the date as it was inserting a new line character as well. This is no longer necessary as GNU Make is now executing the `date` tool.
2023-04-05Troff documents: fixed monospaced example blocksRobin Haberkorn3-15/+15
* .SCITECO_TT should be before .EX, so that the indent is already monospaced. .SCITECO_TT_END still needs to be before .EE however, so that the next non-monospaced line is not "typeset" with a monospaced indent. * naturally only affects the Gtk UI
2023-04-05default font is now "Monospace" instead of CourierRobin Haberkorn2-3/+3
* Courier has the quirk that letter sequences like "fi" are turned into ligatures which breaks the monospaced nature of the display. * We assume that "Monospace" is also more portable, although it hasn't yet been tested on Windows. * only relevant for the Gtk UI of course * It might be a good idea to set SCI_STYLESETCHECKMONOSPACED as well (FIXME?)
2023-04-05sciteco.tmac: also set the LL register (refs #11)Robin Haberkorn1-1/+5
* Hopefully disables paragraph breaking in newer Groff versions, but needs to be tested.
2023-04-05fixed grosciteco for newer Groff versions (refs #11)Robin Haberkorn1-0/+1
* The intermediate output of Groff will contain `t` commands before the font 1 is defined which we interpret as the default font. We therefore hardcode the default-font position to 1 by default - it won't change anyway.
2022-12-10fixed pass-through loops: especially :> and :F<Robin Haberkorn3-20/+80
* fixes test cases like 3<%a:> * you can now use :F< in pass-through loops as well * F> outside of loops will now exit the current macro level. This is analogous to what TECO-11 did. In interactive mode, F> is currently also equivalent to $$ (terminates command line).
2022-12-03fixup: bundle Gtk+ Win32 pixbuf loader DLLs into the package rootRobin Haberkorn1-6/+4
* mingw-bundledlls apparently does not output MinGW-friendly filenames, so we cannot use it to bundle files into a directory differing from the executable's directory.
2022-12-03nightly builds Win32 GtkRobin Haberkorn1-2/+2
* make sure that all DLLs are packaged into the root directory even those for the pixbuf loaders
2022-12-03mingw-bundledlls: blacklisted dwrite.dllRobin Haberkorn1-1/+1
* These are apparently "Microsoft DirectX Typography Services" * patch should be contributed upstream
2022-12-03simplified win32 packaging using mingw-bundedllsRobin Haberkorn4-19/+171
* mingw-bundledlls finds and copies transitive DLL dependencies. * Like all external one-file sources, mingw-bundledlls has been copied into contrib/ instead of adding a submodule. It's taken from here: https://github.com/mpreisler/mingw-bundledlls * Packaging is more robust now if dependant DLLs are upgraded or if we decide to link in more statically. With the old scheme, we might also miss some DLL and break builds without even noticing it.
2022-12-01testsuite: added (known bug) testcases for dangling else- and end-if statementsRobin Haberkorn1-0/+6
* This is not easy to fix (show errors when encountering these constructs without preceding if <"> statements) and would require complicating the parser only to detect this. On the other hand, keeping things as they are does not really harm anybody.
2022-12-01sciteco(1) manpage: All UIs support ^C interruptions nowRobin Haberkorn1-2/+1
2022-12-01nightly builds: create Mac OS *.pkg packagesRobin Haberkorn1-2/+7
This is slightly less idiosyncratic than shipping a tarball of the installation root. The pkg has been reported to be installable even via the graphic installer when providing a password. Or it can be installed via terminal with `sudo installer`. So it no longer requires any manual dequarantining.
2022-11-28fixed a number of crashes due to empty string arguments or uninitialized ↵Robin Haberkorn10-7/+34
registers * An empty but valid teco_string_t can contain NULL pointers. More precisely, a state's done_cb() can be invoked with such empty strings in case of empty string arguments. Also a registers get_string() can return the NULL pointer for existing registers with uninitialized string parts. * In all of these cases, the language should treat "uninitialized" strings exactly like empty strings. * Not doing so, resulted in a number of vulnerabilities. * EN$$ crashed if "_" was uninitialized * The ^E@q and ^ENq string building constructs would crash for existing but uninitialized registers q. * ?$ would crash * ESSETILEXER$$ would crash * This is now fixed. Test cases have been added. * I cannot guarantee that I have found all such cases. Generally, it might be wise to change our definitions and make sure that every teco_string_t must have an associated heap object to be valid. All functions returning pointer+length pairs should consequently also never return NULL pointers.