aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/qreg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/qreg.c')
-rw-r--r--src/qreg.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/qreg.c b/src/qreg.c
index 2c5d4a5..1ce727f 100644
--- a/src/qreg.c
+++ b/src/qreg.c
@@ -399,6 +399,32 @@ teco_qreg_plain_new(const gchar *name, gsize len)
}
static gboolean
+teco_qreg_radix_set_integer(teco_qreg_t *qreg, teco_int_t value, GError **error)
+{
+ if (value < 2) {
+ g_set_error_literal(error, TECO_ERROR, TECO_ERROR_FAILED,
+ "Invalid radix");
+ return FALSE;
+ }
+
+ qreg->integer = value;
+ return TRUE;
+}
+
+/** @static @memberof teco_qreg_t */
+static teco_qreg_t *
+teco_qreg_radix_new(void)
+{
+ static teco_qreg_vtable_t vtable = TECO_INIT_QREG(
+ .set_integer = teco_qreg_radix_set_integer
+ );
+
+ teco_qreg_t *qreg = teco_qreg_new(&vtable, "\x12", 1); /* ^R */
+ qreg->integer = 10;
+ return qreg;
+}
+
+static gboolean
teco_qreg_external_edit(teco_qreg_t *qreg, GError **error)
{
g_auto(teco_string_t) str = {NULL, 0};
@@ -913,8 +939,7 @@ teco_qreg_table_init_locals(teco_qreg_table_t *table, gboolean must_undo)
/* search mode ("^X") */
teco_qreg_table_insert(table, teco_qreg_plain_new("\x18", 1));
/* numeric radix ("^R") */
- table->radix = teco_qreg_plain_new("\x12", 1);
- table->radix->vtable->set_integer(table->radix, 10, NULL);
+ table->radix = teco_qreg_radix_new();
teco_qreg_table_insert(table, table->radix);
}