aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/interface.h
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2025-07-25 01:41:37 +0300
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2025-07-26 00:42:15 +0300
commiteee669a76b3c0b1928475d55d9e1333b3d15bb8c (patch)
treea56d85bf4e92c8049bd5e308cb13ee8e46de123c /src/interface.h
parentf7a11166d4a376867235bee213eeffddc05a8d78 (diff)
downloadsciteco-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.h15
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);