diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2025-07-25 01:41:37 +0300 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2025-07-26 00:42:15 +0300 |
commit | eee669a76b3c0b1928475d55d9e1333b3d15bb8c (patch) | |
tree | a56d85bf4e92c8049bd5e308cb13ee8e46de123c /src/interface.h | |
parent | f7a11166d4a376867235bee213eeffddc05a8d78 (diff) | |
download | sciteco-eee669a76b3c0b1928475d55d9e1333b3d15bb8c.tar.gz |
implemented the <^A> command for printing arbitrary strings
* Greatly improved usability as a scripting language.
* The command is in DEC TECO, but in contrast to DEC TECO, we also
support string building constructs in ^A.
* Required some refactoring: As we want it to write everything verbatim
to stdout, the per-interface method is now teco_interface_msg_literal()
and it has to deal with unprintable characters.
When displaying in the UI, we use teco_curses_format_str() and TecoGtkLabel
functions/widgets to deal with possible control codes.
* Numbers printed with `=` have to be written with a trailing linefeed,
which would also be visible as a reverse "LF" in the UI.
Not sure whether this is acceptable - the alternative would be to strip
the strings before displaying them.
* Messages written to stdout are also auto-flushed at the moment.
In the future we might want to put flushing under control of the language.
Perhaps :^A could inhibit the flushing.
Diffstat (limited to 'src/interface.h')
-rw-r--r-- | src/interface.h | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/src/interface.h b/src/interface.h index b1ad2b8..0e03a98 100644 --- a/src/interface.h +++ b/src/interface.h @@ -16,7 +16,6 @@ */ #pragma once -#include <stdarg.h> #include <signal.h> #include <glib.h> @@ -62,17 +61,9 @@ typedef enum { } teco_msg_t; /** @pure */ -void teco_interface_vmsg(teco_msg_t type, const gchar *fmt, va_list ap); +void teco_interface_msg_literal(teco_msg_t type, const gchar *str, gsize len); -static inline void G_GNUC_PRINTF(2, 3) -teco_interface_msg(teco_msg_t type, const gchar *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - teco_interface_vmsg(type, fmt, ap); - va_end(ap); -} +void teco_interface_msg(teco_msg_t type, const gchar *fmt, ...) G_GNUC_PRINTF(2, 3); /** @pure */ void teco_interface_msg_clear(void); @@ -180,7 +171,7 @@ gboolean teco_interface_event_loop(GError **error); * Interfacing to the external SciTECO world */ /** @protected */ -void teco_interface_stdio_vmsg(teco_msg_t type, const gchar *fmt, va_list ap); +void teco_interface_stdio_msg(teco_msg_t type, const gchar *str, gsize len); /** @pure */ void teco_interface_cleanup(void); |