aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core-commands.c9
-rw-r--r--src/glob.c3
-rw-r--r--src/qreg-commands.c4
-rw-r--r--src/qreg.c39
-rw-r--r--src/qreg.h7
-rw-r--r--src/search.c4
6 files changed, 18 insertions, 48 deletions
diff --git a/src/core-commands.c b/src/core-commands.c
index 94501b6..9c70825 100644
--- a/src/core-commands.c
+++ b/src/core-commands.c
@@ -1363,8 +1363,7 @@ teco_state_control_octal(teco_machine_main_t *ctx, GError **error)
{
teco_qreg_t *qreg = ctx->qreg_table_locals->radix;
assert(qreg != NULL);
- if (!qreg->vtable->undo_set_integer(qreg, error) ||
- !qreg->vtable->set_integer(qreg, 8, NULL))
+ if (!qreg->vtable->set_integer(qreg, 8, NULL))
return;
}
@@ -1376,8 +1375,7 @@ teco_state_control_decimal(teco_machine_main_t *ctx, GError **error)
{
teco_qreg_t *qreg = ctx->qreg_table_locals->radix;
assert(qreg != NULL);
- if (!qreg->vtable->undo_set_integer(qreg, error) ||
- !qreg->vtable->set_integer(qreg, 10, NULL))
+ if (!qreg->vtable->set_integer(qreg, 10, NULL))
return;
}
@@ -1408,8 +1406,7 @@ teco_state_control_radix(teco_machine_main_t *ctx, GError **error)
return;
teco_expressions_push(radix);
} else {
- if (!qreg->vtable->undo_set_integer(qreg, error) ||
- !qreg->vtable->set_integer(qreg, teco_expressions_pop_num(0), error))
+ if (!qreg->vtable->set_integer(qreg, teco_expressions_pop_num(0), error))
return;
}
}
diff --git a/src/glob.c b/src/glob.c
index 24f2647..cb571c4 100644
--- a/src/glob.c
+++ b/src/glob.c
@@ -607,8 +607,7 @@ teco_state_glob_filename_done(teco_machine_main_t *ctx, teco_string_t str, GErro
undo__teco_interface_ssm(SCI_UNDO, 0, 0);
}
- if (!glob_reg->vtable->undo_set_integer(glob_reg, error) ||
- !glob_reg->vtable->set_integer(glob_reg, teco_bool(matching), error))
+ if (!glob_reg->vtable->set_integer(glob_reg, teco_bool(matching), error))
return NULL;
return &teco_state_start;
diff --git a/src/qreg-commands.c b/src/qreg-commands.c
index a31fe4c..a6390a1 100644
--- a/src/qreg-commands.c
+++ b/src/qreg-commands.c
@@ -611,7 +611,6 @@ teco_state_setqreginteger_got_register(teco_machine_main_t *ctx, teco_qreg_t *qr
if (teco_expressions_args() || teco_num_sign < 0) {
teco_int_t v;
if (!teco_expressions_pop_num_calc(&v, teco_num_sign, error) ||
- !qreg->vtable->undo_set_integer(qreg, error) ||
!qreg->vtable->set_integer(qreg, v, error))
return NULL;
@@ -659,8 +658,7 @@ teco_state_increaseqreg_got_register(teco_machine_main_t *ctx, teco_qreg_t *qreg
teco_int_t value, add;
- if (!qreg->vtable->undo_set_integer(qreg, error) ||
- !qreg->vtable->get_integer(qreg, &value, error) ||
+ if (!qreg->vtable->get_integer(qreg, &value, error) ||
!teco_expressions_pop_num_calc(&add, teco_num_sign, error) ||
!qreg->vtable->set_integer(qreg, value += add, error))
return NULL;
diff --git a/src/qreg.c b/src/qreg.c
index dae4c9b..559373c 100644
--- a/src/qreg.c
+++ b/src/qreg.c
@@ -138,15 +138,9 @@ teco_qreg_set_eol_mode(teco_qreg_t *qreg, gint mode)
static gboolean
teco_qreg_plain_set_integer(teco_qreg_t *qreg, teco_int_t value, GError **error)
{
- qreg->integer = value;
- return TRUE;
-}
-
-static gboolean
-teco_qreg_plain_undo_set_integer(teco_qreg_t *qreg, GError **error)
-{
if (qreg->must_undo) // FIXME
teco_undo_int(qreg->integer);
+ qreg->integer = value;
return TRUE;
}
@@ -370,7 +364,6 @@ teco_qreg_plain_save(teco_qreg_t *qreg, const gchar *filename, GError **error)
*/
#define TECO_INIT_QREG(...) { \
.set_integer = teco_qreg_plain_set_integer, \
- .undo_set_integer = teco_qreg_plain_undo_set_integer, \
.get_integer = teco_qreg_plain_get_integer, \
.set_string = teco_qreg_plain_set_string, \
.undo_set_string = teco_qreg_plain_undo_set_string, \
@@ -407,21 +400,13 @@ teco_qreg_dot_set_integer(teco_qreg_t *qreg, teco_int_t value, GError **error)
return FALSE;
}
- teco_interface_ssm(SCI_GOTOPOS, pos, 0);
- /*
- * FIXME: Currently emits undo tokens.
- * But we could just get rid of the undo_set_integer() callback.
- */
- teco_current_doc_set_dot(value);
- return TRUE;
-}
-
-static gboolean
-teco_qreg_dot_undo_set_integer(teco_qreg_t *qreg, GError **error)
-{
if (teco_current_doc_must_undo())
undo__teco_interface_ssm(SCI_GOTOPOS,
teco_interface_ssm(SCI_GETCURRENTPOS, 0, 0), 0);
+
+ teco_interface_ssm(SCI_GOTOPOS, pos, 0);
+ teco_current_doc_set_dot(value);
+
return TRUE;
}
@@ -439,7 +424,6 @@ teco_qreg_dot_new(void)
{
static teco_qreg_vtable_t vtable = TECO_INIT_QREG(
.set_integer = teco_qreg_dot_set_integer,
- .undo_set_integer = teco_qreg_dot_undo_set_integer,
.get_integer = teco_qreg_dot_get_integer
);
@@ -639,13 +623,8 @@ teco_qreg_external_save(teco_qreg_t *qreg, const gchar *filename, GError **error
static gboolean
teco_qreg_bufferinfo_set_integer(teco_qreg_t *qreg, teco_int_t value, GError **error)
{
- return teco_ring_edit(value, error);
-}
-
-static gboolean
-teco_qreg_bufferinfo_undo_set_integer(teco_qreg_t *qreg, GError **error)
-{
- return teco_current_doc_undo_edit(error);
+ return teco_current_doc_undo_edit(error) &&
+ teco_ring_edit(value, error);
}
static gboolean
@@ -711,7 +690,6 @@ teco_qreg_bufferinfo_new(void)
{
static teco_qreg_vtable_t vtable = TECO_INIT_QREG_EXTERNAL(
.set_integer = teco_qreg_bufferinfo_set_integer,
- .undo_set_integer = teco_qreg_bufferinfo_undo_set_integer,
.get_integer = teco_qreg_bufferinfo_get_integer,
.set_string = teco_qreg_bufferinfo_set_string,
.undo_set_string = teco_qreg_bufferinfo_undo_set_string,
@@ -1268,8 +1246,7 @@ teco_qreg_stack_pop(teco_qreg_t *qreg, GError **error)
teco_qreg_stack_entry_t *entry;
entry = &g_array_index(teco_qreg_stack, teco_qreg_stack_entry_t, teco_qreg_stack->len-1);
- if (!qreg->vtable->undo_set_integer(qreg, error) ||
- !qreg->vtable->set_integer(qreg, entry->integer, error))
+ if (!qreg->vtable->set_integer(qreg, entry->integer, error))
return FALSE;
/* exchange document ownership between stack entry and Q-Register */
diff --git a/src/qreg.h b/src/qreg.h
index c0f95db..ca35e78 100644
--- a/src/qreg.h
+++ b/src/qreg.h
@@ -47,18 +47,19 @@ extern teco_view_t *teco_qreg_view;
* teco_qreg_set_integer(qreg, 23, error);
*
* But this probably won't work. Perhaps use the X-macro pattern.
+ *
+ * FIXME: We can probably get rid of all the separate undo callbacks/methods.
*/
typedef const struct {
+ /* already pushes undo tokens */
gboolean (*set_integer)(teco_qreg_t *qreg, teco_int_t value, GError **error);
- /** @fixme We don't appear to need this as a separate callback */
- gboolean (*undo_set_integer)(teco_qreg_t *qreg, GError **error);
gboolean (*get_integer)(teco_qreg_t *qreg, teco_int_t *ret, GError **error);
gboolean (*set_string)(teco_qreg_t *qreg, const gchar *str, gsize len,
guint codepage, GError **error);
gboolean (*undo_set_string)(teco_qreg_t *qreg, GError **error);
- /* does not need an explicit undo-call */
+ /* already pushes undo tokens */
gboolean (*append_string)(teco_qreg_t *qreg, const gchar *str, gsize len, GError **error);
gboolean (*get_string)(teco_qreg_t *qreg, gchar **str, gsize *len,
diff --git a/src/search.c b/src/search.c
index accee69..844c459 100644
--- a/src/search.c
+++ b/src/search.c
@@ -105,7 +105,6 @@ teco_state_control_search_mode(teco_machine_main_t *ctx, GError **error)
teco_expressions_push(search_mode);
} else {
if (!teco_expressions_pop_num_calc(&search_mode, teco_num_sign, error) ||
- !reg->vtable->undo_set_integer(reg, error) ||
!reg->vtable->set_integer(reg, search_mode, error))
return;
}
@@ -957,8 +956,7 @@ teco_state_search_process(teco_machine_main_t *ctx, teco_string_t str, gsize new
teco_qreg_t *search_reg = teco_qreg_table_find(&teco_qreg_table_globals, "_", 1);
g_assert(search_reg != NULL);
- if (!search_reg->vtable->undo_set_integer(search_reg, error) ||
- !search_reg->vtable->set_integer(search_reg, TECO_FAILURE, error))
+ if (!search_reg->vtable->set_integer(search_reg, TECO_FAILURE, error))
return FALSE;
g_autoptr(teco_machine_qregspec_t) qreg_machine;