Age | Commit message (Collapse) | Author | Files | Lines |
|
* it appears to behave similar to Mac OS with regard to recursions
|
|
* 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.
|
|
|
|
* 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.
|
|
* 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.
|
|
* 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.
|
|
* 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.
|
|
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.
|
|
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.
|
|
* the GObject lifecycle was violated, resulting in use-after-free scenarios
|
|
* 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.
|
|
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.
|
|
|
|
* 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).
|
|
* 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.
|
|
* 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.
|
|
* 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().
|
|
* 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.
|
|
* The rubbed out command line should not be discarded.
* This has been broken since 432ad24e382681f1c13b07e8486e91063dd96e2e
(C conversion).
|
|
* Disabled pyTooling/Actions/releaser composite on Ubuntu and use a container instead.
The composite step is obviously broken on Ubuntu 20.04.
|
|
* pyTooling/Actions/releaser/composite updated to v0.4.6
|
|
|
|
|
|
* 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.
|
|
* .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
|
|
* 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?)
|
|
* Hopefully disables paragraph breaking in newer Groff versions,
but needs to be tested.
|
|
* 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.
|
|
* 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).
|
|
* 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.
|
|
* make sure that all DLLs are packaged into the root directory even
those for the pixbuf loaders
|
|
* These are apparently "Microsoft DirectX Typography Services"
* patch should be contributed upstream
|
|
* 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.
|
|
* 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.
|
|
|
|
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.
|
|
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.
|
|
* replace actions/upload-artifact with pyTooling/Actions/releaser
* The release URL will never change:
https://github.com/rhaberkorn/sciteco/releases/tag/nightly
* On the downside there is now a "nightly" tag in the repo that will
be updated to HEAD whenever a nightly build runs - but other than that it does no harm.
* Compared with artifacts, the new method has several advantages:
* No more nightly.link Github App required
* We can add arbitrary files into releases and no longer have to ZIP everything.
So you can now download the Debian packages separately, the Mac OS "package" is a tar.gz
(instead of zipped tar).
For the Windows packages not much changes, though.
* Files get updated in the "Nightly Builds" release even when individual jobs in the
nightly.yml workflow fail.
With artefacts, the entire workflow must be successful.
* Releases are not deleted after 90 days as opposed to artefacts.
So when my workflow breaks next time, there will still be files to download
for a long time.
* As a downside, the file names in the release have to be uniform and must not contain
versions, commit hashes and dates so that uploads replace old files instead of adding
new ones.
Some manual cleanup could still be necessary after large packaging changes.
This could be worked around, by uploading everything first as artefacts and updating the
release in a separate job, but is not worth the trouble IMHO.
* Another disadvantage is that there will be no old nightly builds to download
(although these were not easily downloadable for end users before).
|
|
* For markdown.tes we should better introduce new predefined colors in the
color scheme files since it doesn't map well to existing colors.
For italic and bold, I am not using the predefined colors at all but only set
the bold and italic style attributes -- this should still be portable across
color schemes.
|
|
Not that speed would make any difference here whatsoever...
|
|
|
|
* single quoted constants are highlighted like single quoted strings in all other
auto-generated lexers using "CPP".
* recognize /// and //! and comments after preprocessor statements
|
|
* The device tree lexer reuses CPP and has certain limitations.
For once it does not recognize /keywords/ and secondly it confuses
properties beginning with # as preprocessor statements.
|
|
* should fix Win32/Gtk packaging
|
|
* Gtk packaging is quite possibly still broken
|
|
* allows us to get rid of some workarounds
* the workarounds themselves required relatively recent PDCursesMod
versions, so we can just as well bump the version yet another time.
We are probably the only ones building it (via Github actions) anyway.
* With v4.3.4 you should be able to link dynamically, but we are still
linking statically for nightly builds to keep binary sizes small.
Unfortunately, the glib builds shipping with MinGW still have
dynamically linked helper executables.
|
|
* This test case no longer fails on MacOS and MinGW builds probably
because the settings of the underlying libpcre library changed.
* Since these settings are not predictable, cannot be queried and may even change on some
flavors of Linux, it has been completely disabled for the time being.
* Should fix CI and nightly builds on MacOS and Win32
|
|
begin with an equals character
* Has been observed on Windows Server 2008 with Glib 2.74.1-1, but not on the
Github CI runner.
|
|
ubuntu-18.04 and macos-10.15
As much as I like to support older systems, this will otherwise suddenly and unexpectedly break
CI and nightly builds in the near future...
|
|
g_listenv()
* This is assumed to fix current Windows CI build problems caused by g_getenv() returning NULL
for keys contained in g_listenv(), which is probably a new Glib bug.
* Using g_get_environ() is more efficient since we do not have to repeatedly search
through the environment array with g_getenv().
* Windows 2000 - which supposedly relied on the old code because of its own bugs - is
no longer supported by our minimum Glib version anyway.
|