aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRobin Haberkorn <rhaberkorn@fmsbw.de>2026-10-04 22:16:43 +0200
committerRobin Haberkorn <rhaberkorn@fmsbw.de>2026-10-04 23:17:03 +0200
commit018c7d10afedb57eae9661105fdd0e709d5d0bac (patch)
tree0f6dbcbb763df36f9fe7d22fa28bf7e302cb79c4
parent5b9ac0d43650bc7a1fe5d6e134e74bda1243fd99 (diff)
-rw-r--r--TODO153
1 files changed, 118 insertions, 35 deletions
diff --git a/TODO b/TODO
index ec65898..c1088b5 100644
--- a/TODO
+++ b/TODO
@@ -2,10 +2,24 @@ Tasks:
* Have a look at TECO-86.
* VEDIT and PMATE for MS-DOS
* Make sure that fmsbw.de is indexed by Google
+ * Update all CI pipelines to freebsd/freebsd-runtime:15.1
+ This also means we'll have to update the server first.
+ * Build FreeBSD GTK versions and run test suite as part of CI.
+ Try to run against broadwayd instead of Xvfb.
+ * Add SciTECO to the official list of LSP implementations:
+ https://microsoft.github.io/language-server-protocol/implementors/tools/
Known Bugs:
- * OBS GTK builds sometimes fail: "cannot open display"
- Obviously, xvfb-run isn't reliable or has race conditions.
+ * GTK on Windows 11: Doesn't do anti-aliasing on all screens.
+ * Navigating with cursor keys to the end of pathologically long lines is
+ still slow.
+ * ?...$ and FT...$ does not always scroll the topic into view.
+ * EC command paths ($PATH or the first command in 0,128ED EC...) are
+ resolved against $PATH, but you cannot overwrite that with the `$PATH` Q-Register.
+ That's because we aren't currently using G_SPAWN_SEARCH_PATH_FROM_ENVP and
+ there's a special workaround for FreeBSD < 16 as well in spawn.c.
+ * Scinterm: selections are sometimes black when scrolling horizontally.
+ Happens only when the selection is at the beginning of the line after scrolling.
* In multiline command lines, the asterisk can scroll out of
view. Perhaps it has to be drawn independently of Scinterm.
* FreeBSD's `crontab -e` is not compatible with SciTECO's savepoint mechanism.
@@ -32,13 +46,6 @@ Known Bugs:
In some cases, the internal redrawing blocks SciTECO forever.
* @ES/SCI_CLEARALLREPRESENTATIONS// does nothing.
Might be a Scintilla bug.
- * Some operations can be hard to interrupt because they result
- in costly calculations within Scintilla.
- For instance interrupting ECcat /dev/zero$ can hang in
- the Scintilla Undo operation.
- This particular hang could be avoided by getting rid of
- Scintilla undo actions in teco_view_load_from_channel() and spawn.c.
- We can probably only get rid of undo actions completely and globally.
* Win32: Interrupting <EC> will sometimes hang.
Affects both PDCurses/WinGUI and Gtk.
This no longer happens with ECbash -c 'while true; do true; done'$.
@@ -63,7 +70,7 @@ Known Bugs:
TECO-11 patterns do not backtrack apparently.
Perhaps ^ES should always be translated to \s++ (possessive quantifier).
On the other hand, we would have to extend the pattern syntax to allow
- backtracking.
+ backtracking. Or leave all of this to regular expressions.
* Colors are still wrong in Linux console even if TERM=linux-16color
when using Solarized. Affects e.g. the message line which uses the
reverse of STYLE_DEFAULT.
@@ -285,6 +292,7 @@ Features:
The same could be done with a caret: `^0FF`.
Alternatively, ^P would still be available as a single-key-press
hex-constant prefix.
+ Octal constants could begin with 0 as in C, e.g. 0666
* Furthermore, this opens the possibility of floating point
numbers. The "." command does not take arguments, so it
could be part of the number syntax. This disallows constructs
@@ -410,7 +418,7 @@ Features:
* _pattern$ as equivalence to Spattern$^SC.
Well almost, since ^SC must not be executed in the failure case.
* String building construct for subpattern references: ^Yx
- Perhaps support ^Y(x) as well.
+ Perhaps support ^Y<x> as well.
Since this is mainly useful for search-replace commands,
we'd have to store the actual data in teco_range_t as the
matched pattern is removed from the buffer before inserting the replacement
@@ -418,9 +426,14 @@ Features:
* Visual selections via `...'.
Allows them to be used recursively (eg. as a tool in macros).
Returns the buffer range.
+ * If we find no other use for the backtick (`), it might become
+ an alternative to the apostroph ('), simply because
+ it avoids complicated quoting of apostrophs on the shell.
+ We already have <F"> for that purpose.
* Perhaps there should be a built-in command for joining
lines as has been requested by users.
^J (caret+J) would still be free.
+ But there is no real advantage to using a macro.
* Buffer ids should be "circular", i.e. interpreted modulo the
number of buffers in the ring. This allows "%*" to wrap at the
end of the buffer list.
@@ -429,6 +442,7 @@ Features:
in the ring. It should also display the numeric buffer ids.
* Gtk: Unicode IME support for asiatic languages.
Have a look how it is done in Scintilla.
+ * Can Unicode grapheme clusters be handled somehow?
* Progress indication in commandline cursor:
Perhaps blinking or invisible?
The problem is, this won't work so easily once we use a Scintilla
@@ -507,16 +521,18 @@ Features:
EMq<param>$ or @Mq/param/
This will have to switch back and forth between the macro and
the invoking frame supplying the macro (similar to a coroutine).
- In the most simple case, a special command returns the next character
- produced by the callers string building machine including rubout and
- the user will have to implement rubout-support manually.
- For a lot of common cases, we could also allow a string building
- construct that symbolizes the string parameter supplied by the
- caller. This could activate interactive processing in the macro's
- current command, allowing you to easily "wrap" interactive commands in
- macros. The same construct would also be useful with
- non-interactive commands as a way to store the supplied parameter
- using EU for instance.
+ In the most simple case, a special Q-Register symbolizes the
+ string argument.
+ Perhaps we can also get away with switching back and forth between
+ the command line macro and the first frame if it won't be
+ possible to pass "incomplete" string arguments to a deeper
+ macro frame or interactive command.
+ For get_string() and get_length() we have to read the entire
+ string from the command line.
+ For get_character(), we read as many characters as are missing
+ from the buffer.
+ This probably shouldn't be a local register, but a special register
+ stored along with the macro invocation frame.
* If we will never allow @Mq/foo/ for passing arguments to macros,
we might at least make the state of the @ modifier (and the number
of : modifiers) available to the macro, e.g. via a special
@@ -543,6 +559,15 @@ Features:
spell checking. Naturally it could only be exected at the
end of executing interactive commands) and it should be triggered
only at the end of command lines.
+ * A hook when returning to the start state could also be used for
+ spell checking.
+ Furthermore it could be useful for implementing an interactive TECO debugger.
+ But it would require passing the current macro in some defined
+ Q-Reg as well - perhaps just open the macro at the the PC if the
+ hook is defined.
+ * Debug tracing of TECO macros. Perhaps via an ED flag?
+ Perhaps include the state name in state structs for improved
+ readability.
* CSS lexer config
* Add a dedicated JSON lexer.
JSON files are currently handled by the Javascript lexer (js.tes).
@@ -575,9 +600,6 @@ Features:
* FreeBSD: rctl(8) theoretically allows setting up per-process actions
when exceeding the memory limit.
This however requires special system settings.
- * Auto-completions customization via external programs.
- This among other things could be used to integrate LSPs-driven
- autocompletions.
* Wherever we take buffer positions (nJ; n,mD; nQ...),
negative numbers could refer to the end of the buffer or
Q-Register string.
@@ -686,8 +708,22 @@ Features:
should be thrown instead on the second `-`.
* The command line replacement register (Escape) should be automatically
syntax highlighted.
- I am not sure however how that could be done without a special
- ED hook.
+ There isn't much point in using a register at all.
+ Perhaps just open a pseudo file like /tmp/cmdline.tes.
+ It would never be saved, but since it's a view, it would automatically
+ be syntax highlighted.
+ On the other hand, it could slow down command line macros.
+ It would also be possible to support special "abstract" buffers
+ with filenames beginning with null (^@).
+ Or perhaps more consistently, allow upgrading arbitrary registers
+ into Scintilla views.
+ * The `*` register could contain information about the
+ currently edited Q-Reg by reporting ^@q (Q-Reg name
+ prefixed with null-byte).
+ The numeric part would still be the last edited buffer.
+ [* ... ]* would then work when editing Q-Regs as well.
+ It could also be helpful for turning the command line
+ view into a register.
* SciTECO syntax highlighting improvements:
* The { } escapes should be styled as SCE_SCITECO_OPERATOR.
* There should be two SCE_SCITECO_STRING[12] styles and second
@@ -794,9 +830,6 @@ Features:
We'd have to handle an overlapping info popup, though.
Should we deactivate the hardware cursor via curs_set(0) if it overlaps
the popup?
- * Ctags support
- Perhaps can be Video TECO compatible.
- https://github.com/universal-ctags/ctags
* Non-spacing code points would currently be handled as separate
SciTECO characters.
On the one hand, this means you can remove accents from characters.
@@ -815,8 +848,28 @@ Features:
Also, it is undesirable for some animations (e.g. shooting in tank.tes).
* New ED option: use fsync() when writing files.
Could be useful on systems that crash frequently.
+ * --fake-cmdline should start up in interactive mode
+ in ncurses but redirect stdout/stdin to /dev/null.
+ Using a new --screen-dump, we could perform dumps
+ of the screen after running the fake command line.
+ These dumps can then be checked in test suite.
+ * Tree-Sitter lexer support via TSLexia
+ https://github.com/orbitalquark/tslexia
+ * String building construct to escape TECO patterns (^EPq) and
+ regular expressions (^E~q).
+ * Overtype command. Perhaps <:I> or <FI>.
+ You can also type I...$-^SD of course.
+ * ED flag for easier LSP and file name completions:
+ At the beginning of the line, insert tabs (insertions),
+ but afterwards complete via LSP.
+ This could avoid having to toggle the immediate editing modifier
+ (CTRL+G). On the downside you will have to toggle it in
+ order to insert regular tabs/indentations after the
+ start of the line.
Optimizations:
+ * If teco_error_*_set() functions would always return FALSE,
+ you could more easily chain to them.
* Use SC_DOCUMENTOPTION_STYLES_NONE in batch mode.
However, we do not actually know that we do not continue
in interactive mode. Also, some scripts like grosciteco.tes
@@ -841,11 +894,9 @@ Optimizations:
* refactor search commands (create proper base class)
* undo__teco_interface_ssm() could always include the check for
teco_current_doc_must_undo().
- * Avoid Scintilla Undo actions entirely.
- This will make undo token creation of deletions harder,
- since we must first query the text to be reinserted again,
- but will probably save lots of memory and one huge source
- of bugs.
+ * Or set a flag on SCN_UPDATEUI, so we can avoid unnecessary
+ refreshes, especially on Curses.
+ Unfortunately, this notification is not currently reliably delivered.
* Newer GCC and C23 features:
* Perhaps teco_bool_t usage could be simplified using
__attribute__((hardbool)).
@@ -884,6 +935,8 @@ Optimizations:
modules.
On the other hand, this imports tons of sh*t into the
repository and chains us to Autotools.
+ * libuv might also be an option but it doesn't support
+ older versions of Windows either.
* Does it make sense to import glib-2.0.m4?
* MinGW might now support weak symbols which would be useful
in interface.c to provide some default functions and avoid
@@ -942,12 +995,33 @@ Optimizations:
files into the heap. glib has an appropriate function with fallback for
platforms without mmap().
Perhaps file munging and <EI> could make use of it.
+ * Instead of generating regular expressions, directly parse TECO patterns
+ and glob patterns using custom terex lexers.
+ * GTK 4 has GDK_BACKEND=headless which could further simplify
+ headless builds and tests as part of packaging.
+ * Check for SC_STATUS_OUTSIDE_DOCUMENT instead of trying to manually
+ detect invalid ranges.
+ * Tokenizer: The main state machine should emit tokens (function pointer+
+ data+position in macro). We execute tokens instead of directly from
+ the state machine.
+ This will reduce parsing overhead in loops at the cost of more
+ boilerplating and more functions.
+ The token stream should ideally be cached for macros.
+ * undo token runner could still be optimized with __attribute__((musttail))
+ I've already tried to use tail-calls in the main state machine -
+ turning state transitions into continuations ("threaded code").
+ But it did not result in preoroducable speedups at least on GCC 16.
+ * A generic bump allocator could replace GStringChunk and be
+ used for many other purposes like popup entries or undo tokens - this
+ is faster, has less overhead and fragmentation.
Documentation:
* Doxygen docs could be deployed on Github pages
automatically.
* The ? command could be extended to support looking
- up help terms at dot in the current document (e.g. if called ?$).
+ up help terms at dot in the current document (e.g. if called as .?$
+ similar to .FT$).
+ `?$` could also toggle through all results just like `FT$`.
Furthermore, womanpages could contain "hypertext" links
to help topics using special Troff markup and grosciteco support.
* The command reference should include an overview.
@@ -990,3 +1064,12 @@ Documentation:
for writing robust macros.
* Knowledge Base: Document how to open SciTECO from file managers,
so that sessions are initialized correctly.
+ * Some binary archives are violating the FOSS licenses.
+ We have to reproduce all licenses of the statically linked
+ libs *and* all DLLs.
+ For Debian we already maintain debian/copyright - perhaps
+ copy this file into the binary archives.
+ But it does not cover all of the DLLs, so perhaps
+ compile a LICENSES directory.
+ * Update the SciTECO page at
+ https://texteditors.org/cgi-bin/wiki.pl?SciTECO