<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sciteco/src, branch master-fmsbw-ci</title>
<subtitle>Scintilla-based Text Editor and COrrector</subtitle>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/'/>
<entry>
<title>Curses: support arbitrary RGB colors</title>
<updated>2026-04-26T00:00:18+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-04-26T00:00:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=282fa65c0d547c89eac6cd4c7e91496a280bece7'/>
<id>282fa65c0d547c89eac6cd4c7e91496a280bece7</id>
<content type='text'>
* Instead of supporting only 16 predefined RGB placeholder
  values in Scintilla messages and styles, you can now use
  arbitrary RGB values and colors are allocated via the terminal
  on the fly.
  You no longer need to call 3EJ to change the default color
  palette.
* The placeholder RGB values are still available.
  Since you will usually want exact RGB values when using
  anything outside of the range of 16 default colors
  and the RGB placeholders will not always exactly correspond
  to their RGB value, you can now call `0,3EJ` to ignore
  the default palette and allocate all colors dynamically.
* Allows for more than 16 colors on the screen simultaneously.
  Also simplifies the solarized.tes color scheme.
  Since both Scinterm and SciTECO try not to touch the 16
  default colors, you also no longer have to deal with
  restoring the palette after program termination
  (which was never reliable anyway).
* Color schemes with non-default colors (solarized.tes)
  may now be broken on TERM=linux-16color (Linux VT)
  since Scinterm will get only 8 colors, but solarized.tes
  needs 16.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Instead of supporting only 16 predefined RGB placeholder
  values in Scintilla messages and styles, you can now use
  arbitrary RGB values and colors are allocated via the terminal
  on the fly.
  You no longer need to call 3EJ to change the default color
  palette.
* The placeholder RGB values are still available.
  Since you will usually want exact RGB values when using
  anything outside of the range of 16 default colors
  and the RGB placeholders will not always exactly correspond
  to their RGB value, you can now call `0,3EJ` to ignore
  the default palette and allocate all colors dynamically.
* Allows for more than 16 colors on the screen simultaneously.
  Also simplifies the solarized.tes color scheme.
  Since both Scinterm and SciTECO try not to touch the 16
  default colors, you also no longer have to deal with
  restoring the palette after program termination
  (which was never reliable anyway).
* Color schemes with non-default colors (solarized.tes)
  may now be broken on TERM=linux-16color (Linux VT)
  since Scinterm will get only 8 colors, but solarized.tes
  needs 16.
</pre>
</div>
</content>
</entry>
<entry>
<title>do not execute `^A` in parse-only mode</title>
<updated>2026-04-19T22:27:45+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-04-19T22:24:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=38130f053e84535e37630e1388b858c46c580f9f'/>
<id>38130f053e84535e37630e1388b858c46c580f9f</id>
<content type='text'>
This was especially dangerous since the introduction of
a message level parameter, which could still be popped from
the expression stack in parse-only mode or during lexing.
This effectively broke n^A interactively in GTK.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This was especially dangerous since the introduction of
a message level parameter, which could still be popped from
the expression stack in parse-only mode or during lexing.
This effectively broke n^A interactively in GTK.
</pre>
</div>
</content>
</entry>
<entry>
<title>teco_view_load_from_channel() now temporarily releases the line character index on the correct view</title>
<updated>2026-04-19T09:43:02+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-04-19T09:38:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=2b8d3f93fdb92df3e67fabff779a2ac1d91358b7'/>
<id>2b8d3f93fdb92df3e67fabff779a2ac1d91358b7</id>
<content type='text'>
* Had been broken since introduction in v2.3.0.
* This slowed down EQq&lt;filename&gt;$ on large files.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Had been broken since introduction in v2.3.0.
* This slowed down EQq&lt;filename&gt;$ on large files.
</pre>
</div>
</content>
</entry>
<entry>
<title>UNIX: do not automatically restart syscalls on SIGINT</title>
<updated>2026-04-18T22:02:16+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-04-18T22:02:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=d4c864e92f89003e73883fe0b259e6c2e3bfb4f3'/>
<id>d4c864e92f89003e73883fe0b259e6c2e3bfb4f3</id>
<content type='text'>
* signal() sets SA_RESTART by default.
* Some syscalls can theoretically block indefinitely.
  Even opening a special file could result in an indefinitely
  blocking operation, that should be interruptible.
  You must still poll teco_interrupted in these read() loops of course.
* Also makes sure that clipboard operations are interruptible
  even if $SCITECO_CLIPBOARD_GET blocks.
  Although I couldn't provoke problems in practice,
  I did observe hangs with xclip on Wayland on Linux,
  that could only be resolved by manually killing xclip.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* signal() sets SA_RESTART by default.
* Some syscalls can theoretically block indefinitely.
  Even opening a special file could result in an indefinitely
  blocking operation, that should be interruptible.
  You must still poll teco_interrupted in these read() loops of course.
* Also makes sure that clipboard operations are interruptible
  even if $SCITECO_CLIPBOARD_GET blocks.
  Although I couldn't provoke problems in practice,
  I did observe hangs with xclip on Wayland on Linux,
  that could only be resolved by manually killing xclip.
</pre>
</div>
</content>
</entry>
<entry>
<title>Curses: fixed rendering bright/light colors on 8-color terminals</title>
<updated>2026-04-16T23:18:20+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-04-16T23:18:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=869de7c6270c50481499c201aa16aa5bc3a56739'/>
<id>869de7c6270c50481499c201aa16aa5bc3a56739</id>
<content type='text'>
* Scinterm was simply rendering them as black, thus effectively
  breaking the Linux and FreeBSD vts with terminal.tes.
* I was considering to render light black as white on 8-color terminals,
  so it's always readable.
  However, if you add in A_BOLD there is a good chance that the
  color will end up grey - at least it does in the virtual terminals (consoles).
* There is no need to use bright colors in the Scintilla view defaults.
  E.g. 0xFFFFF is "light white".
  However on 8-color terminals this will be rendered like white anyway.
  The new defaults are closer to what terminal.tes does.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Scinterm was simply rendering them as black, thus effectively
  breaking the Linux and FreeBSD vts with terminal.tes.
* I was considering to render light black as white on 8-color terminals,
  so it's always readable.
  However, if you add in A_BOLD there is a good chance that the
  color will end up grey - at least it does in the virtual terminals (consoles).
* There is no need to use bright colors in the Scintilla view defaults.
  E.g. 0xFFFFF is "light white".
  However on 8-color terminals this will be rendered like white anyway.
  The new defaults are closer to what terminal.tes does.
</pre>
</div>
</content>
</entry>
<entry>
<title>`^A` now accepts an optional integer to specify the message severity</title>
<updated>2026-04-14T21:19:45+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-04-13T23:16:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=34af154e92383161666751ca69a288c98f5cca60'/>
<id>34af154e92383161666751ca69a288c98f5cca60</id>
<content type='text'>
* I.e. you can now log warnings and errors from SciTECO code as well.
* We do not need a version of ^A accepting code points, since this is
  supported by ^T already.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* I.e. you can now log warnings and errors from SciTECO code as well.
* We do not need a version of ^A accepting code points, since this is
  supported by ^T already.
</pre>
</div>
</content>
</entry>
<entry>
<title>GTK: SIGTERM/SIGHUP always terminates the program and dumps recovery files</title>
<updated>2026-04-12T21:00:40+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-04-12T19:47:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=0a8770ac7d382df8976b2448fccc6cfe434cd4d1'/>
<id>0a8770ac7d382df8976b2448fccc6cfe434cd4d1</id>
<content type='text'>
* SIGTERM used to insert the ^KCLOSE key macro.
  However with the default ^KCLOSE macro, which inserts `EX`,
  this may fail to terminate the editor if buffers are modified.
  If the process is consequently killed by a non-ignorable signal,
  we may still loose data.
* SIGTERM is used to gracefully shut down, so we now always terminate.
  Since we have recovery files, they are now dumped before terminating.
  This makes sure that recovery files are more up-to-date during
  unexpected but gracefull terminations.
* The same functionality is planned on Curses, but requires more fundamental
  changes (TODO).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* SIGTERM used to insert the ^KCLOSE key macro.
  However with the default ^KCLOSE macro, which inserts `EX`,
  this may fail to terminate the editor if buffers are modified.
  If the process is consequently killed by a non-ignorable signal,
  we may still loose data.
* SIGTERM is used to gracefully shut down, so we now always terminate.
  Since we have recovery files, they are now dumped before terminating.
  This makes sure that recovery files are more up-to-date during
  unexpected but gracefull terminations.
* The same functionality is planned on Curses, but requires more fundamental
  changes (TODO).
</pre>
</div>
</content>
</entry>
<entry>
<title>Gtk: fixed interaction between `^T` and main input handling</title>
<updated>2026-04-05T20:58:47+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-04-05T08:01:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=0e3d6c84a52326a1069fe4f7adc2930b974dfa5f'/>
<id>0e3d6c84a52326a1069fe4f7adc2930b974dfa5f</id>
<content type='text'>
Between calls to `^T`, the original key-press-event handler might
enqueue events, that we must first process and report with `^T`.
Otherwise it would be easy to provoke apparent double-reporting of keys after
input loops like `&lt;^T:;&gt;`.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Between calls to `^T`, the original key-press-event handler might
enqueue events, that we must first process and report with `^T`.
Otherwise it would be easy to provoke apparent double-reporting of keys after
input loops like `&lt;^T:;&gt;`.
</pre>
</div>
</content>
</entry>
<entry>
<title>Curses: handle window resizes when blocking in `^T` and don't return function keys</title>
<updated>2026-04-04T12:04:48+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-04-04T11:48:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=0f39109d6bb4ed14b51164791621620cc6b5d461'/>
<id>0f39109d6bb4ed14b51164791621620cc6b5d461</id>
<content type='text'>
* There was a logic error in teco_interface_getch() that caused Curses function key
  codes to be returned directly. These codes however are useless to macro authors and
  can be confused with codepoints. You cannot report function keys in the same "namespace"
  along with Unicode codepoints.
  They are now filtered out.
* Also make sure that Backspace and Return are reported as 8 and 10 respectively
  in all Curses variants.
  All control codes reported by Curses are passed down unmodified - in contrast to
  the command-line input handling. I.e. 13 is not normalized to 10.
* PDCursesMod/WinGUI may return bogus key presses, that also have to be filtered out
  as we already did in the main input handling.
  A function teco_interface_check_key() has been introduced.
* NOTE: teco_interface_blocking_getch() already makes sure that recovery files are dumped
  even when blocking in `^T`.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* There was a logic error in teco_interface_getch() that caused Curses function key
  codes to be returned directly. These codes however are useless to macro authors and
  can be confused with codepoints. You cannot report function keys in the same "namespace"
  along with Unicode codepoints.
  They are now filtered out.
* Also make sure that Backspace and Return are reported as 8 and 10 respectively
  in all Curses variants.
  All control codes reported by Curses are passed down unmodified - in contrast to
  the command-line input handling. I.e. 13 is not normalized to 10.
* PDCursesMod/WinGUI may return bogus key presses, that also have to be filtered out
  as we already did in the main input handling.
  A function teco_interface_check_key() has been introduced.
* NOTE: teco_interface_blocking_getch() already makes sure that recovery files are dumped
  even when blocking in `^T`.
</pre>
</div>
</content>
</entry>
<entry>
<title>decreased default recovery interval to 120s</title>
<updated>2026-03-09T20:12:32+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-03-09T20:12:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=66317e173c592817cfc7052b55a768e3ce7e4223'/>
<id>66317e173c592817cfc7052b55a768e3ce7e4223</id>
<content type='text'>
5 minutes was probably a bit too conservative.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
5 minutes was probably a bit too conservative.
</pre>
</div>
</content>
</entry>
</feed>
