aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/qreg.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qreg.h')
-rw-r--r--src/qreg.h45
1 files changed, 42 insertions, 3 deletions
diff --git a/src/qreg.h b/src/qreg.h
index 7a9e13c..c5e9461 100644
--- a/src/qreg.h
+++ b/src/qreg.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012-2025 Robin Haberkorn
+ * Copyright (C) 2012-2026 Robin Haberkorn
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,6 +18,8 @@
#include <glib.h>
+//#include <rb3ptr.h>
+
#include "sciteco.h"
#include "view.h"
#include "doc.h"
@@ -43,6 +45,8 @@ extern teco_view_t *teco_qreg_view;
* teco_qreg_set_integer_t set_integer;
* ...
* teco_qreg_set_integer(qreg, 23, error);
+ *
+ * But this probably won't work. Perhaps use the X-macro pattern.
*/
typedef const struct {
gboolean (*set_integer)(teco_qreg_t *qreg, teco_int_t value, GError **error);
@@ -156,7 +160,13 @@ struct teco_qreg_table_t {
void teco_qreg_table_init(teco_qreg_table_t *table, gboolean must_undo);
void teco_qreg_table_init_locals(teco_qreg_table_t *table, gboolean must_undo);
-/** @memberof teco_qreg_table_t */
+/**
+ * Insert Q-Register into table.
+ *
+ * @return If non-NULL a register with the same name as qreg already
+ * existed in table. In this case qreg is __not__ automatically freed.
+ * @memberof teco_qreg_table_t
+ */
static inline teco_qreg_t *
teco_qreg_table_insert(teco_qreg_table_t *table, teco_qreg_t *qreg)
{
@@ -165,6 +175,35 @@ teco_qreg_table_insert(teco_qreg_table_t *table, teco_qreg_t *qreg)
}
/** @memberof teco_qreg_table_t */
+static inline void
+teco_qreg_table_insert_unique(teco_qreg_table_t *table, teco_qreg_t *qreg)
+{
+ G_GNUC_UNUSED teco_qreg_t *found = teco_qreg_table_insert(table, qreg);
+ g_assert(found == NULL);
+}
+
+/**
+ * Insert Q-register into table, possibly replacing a register with the same name.
+ *
+ * This is useful for initializing Q-registers late when the user could have
+ * already created one in the profile.
+ *
+ * @param table Table to insert into
+ * @param qreg Q-Register to insert
+ *
+ * @memberof teco_qreg_table_t
+ */
+static inline void
+teco_qreg_table_replace(teco_qreg_table_t *table, teco_qreg_t *qreg)
+{
+ teco_qreg_t *found = teco_qreg_table_insert(table, qreg);
+ if (found) {
+ rb3_replace(&found->head.head, &qreg->head.head);
+ teco_qreg_free(found);
+ }
+}
+
+/** @memberof teco_qreg_table_t */
static inline teco_qreg_t *
teco_qreg_table_find(teco_qreg_table_t *table, const gchar *name, gsize len)
{
@@ -200,7 +239,7 @@ gboolean teco_qreg_stack_pop(teco_qreg_t *qreg, GError **error);
void teco_qreg_stack_clear(void);
typedef enum {
- TECO_ED_HOOK_ADD = 1,
+ TECO_ED_HOOK_ADD = 0,
TECO_ED_HOOK_EDIT,
TECO_ED_HOOK_CLOSE,
TECO_ED_HOOK_QUIT