diff options
| author | Robin Haberkorn <rhaberkorn@fmsbw.de> | 2026-10-04 22:16:43 +0200 |
|---|---|---|
| committer | Robin Haberkorn <rhaberkorn@fmsbw.de> | 2026-10-04 23:17:03 +0200 |
| commit | 018c7d10afedb57eae9661105fdd0e709d5d0bac (patch) | |
| tree | 0f6dbcbb763df36f9fe7d22fa28bf7e302cb79c4 | |
| parent | 5b9ac0d43650bc7a1fe5d6e134e74bda1243fd99 (diff) | |
updated TODOHEADmaster-fmsbw-cimaster
| -rw-r--r-- | TODO | 153 |
1 files changed, 118 insertions, 35 deletions
@@ -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 |
