From eee669a76b3c0b1928475d55d9e1333b3d15bb8c Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Fri, 25 Jul 2025 01:41:37 +0300 Subject: 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. --- src/interface.h | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) (limited to 'src/interface.h') 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 #include #include @@ -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); -- cgit v1.2.3