diff options
Diffstat (limited to 'src/core-commands.c')
| -rw-r--r-- | src/core-commands.c | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/src/core-commands.c b/src/core-commands.c index db3ae9d..8f84224 100644 --- a/src/core-commands.c +++ b/src/core-commands.c @@ -765,7 +765,7 @@ teco_state_start_input(teco_machine_main_t *ctx, gunichar chr, GError **error) teco_error_modifier_set(error, cmd); return NULL; } - return &teco_state_start; + TECO_RETURN(ctx, &teco_state_start, error); } switch (chr) { @@ -794,7 +794,7 @@ teco_state_start_input(teco_machine_main_t *ctx, gunichar chr, GError **error) } if (ctx->flags.mode == TECO_MODE_NORMAL) teco_expressions_add_digit(chr, ctx->qreg_table_locals->radix); - return &teco_state_start; + TECO_RETURN(ctx, &teco_state_start, error); case '*': /* @@ -806,7 +806,7 @@ teco_state_start_input(teco_machine_main_t *ctx, gunichar chr, GError **error) */ if (teco_cmdline_ssm(SCI_GETCURRENTPOS, 0, 0) == 1 && teco_cmdline_ssm(SCI_GETCHARAT, 0, 0) == '*') - return &teco_state_save_cmdline; + TECO_RETURN(ctx, &teco_state_save_cmdline, error); /* treat as an operator */ break; @@ -821,7 +821,7 @@ teco_state_start_input(teco_machine_main_t *ctx, gunichar chr, GError **error) if (ctx->parent.must_undo) teco_undo_gint(ctx->nest_level); ctx->nest_level++; - return &teco_state_start; + TECO_RETURN(ctx, &teco_state_start, error); case '>': if (ctx->flags.modifier_at) { @@ -840,7 +840,7 @@ teco_state_start_input(teco_machine_main_t *ctx, gunichar chr, GError **error) teco_undo_gint(ctx->nest_level); ctx->nest_level--; } - return &teco_state_start; + TECO_RETURN(ctx, &teco_state_start, error); /* * Control Structures (conditionals) @@ -858,9 +858,9 @@ teco_state_start_input(teco_machine_main_t *ctx, gunichar chr, GError **error) else if (ctx->flags.mode == TECO_MODE_NORMAL) /* skip to end of conditional; skip ELSE-part */ ctx->flags.mode = TECO_MODE_PARSE_ONLY_COND; - return &teco_state_start; + TECO_RETURN(ctx, &teco_state_start, error); - case '\'': return teco_state_endcond(ctx, "'", error); + case '\'': TECO_RETURN(ctx, teco_state_endcond(ctx, "'", error), error); /* * Word movement and deletion commands. @@ -873,13 +873,13 @@ teco_state_start_input(teco_machine_main_t *ctx, gunichar chr, GError **error) * but should accept only one colon modifier. */ case 'w': - case 'W': return teco_state_start_words(ctx, "W", 1, error); + case 'W': TECO_RETURN(ctx, teco_state_start_words(ctx, "W", 1, error), error); case 'p': - case 'P': return teco_state_start_words(ctx, "P", -1, error); + case 'P': TECO_RETURN(ctx, teco_state_start_words(ctx, "P", -1, error), error); case 'v': - case 'V': return teco_state_start_delete_words(ctx, "V", 1, error); + case 'V': TECO_RETURN(ctx, teco_state_start_delete_words(ctx, "V", 1, error), error); case 'y': - case 'Y': return teco_state_start_delete_words(ctx, "Y", -1, error); + case 'Y': TECO_RETURN(ctx, teco_state_start_delete_words(ctx, "Y", -1, error), error); /* * Modifiers @@ -898,11 +898,11 @@ teco_state_start_input(teco_machine_main_t *ctx, gunichar chr, GError **error) if (ctx->parent.must_undo) teco_undo_flags(ctx->flags); ctx->flags.modifier_at = TRUE; - return &teco_state_start; + TECO_RETURN(ctx, &teco_state_start, error); case ':': if (ctx->flags.mode > TECO_MODE_NORMAL) - return &teco_state_start; + TECO_RETURN(ctx, &teco_state_start, error); if (ctx->flags.modifier_colon >= 2) { teco_error_modifier_set(error, ":"); return NULL; @@ -910,18 +910,21 @@ teco_state_start_input(teco_machine_main_t *ctx, gunichar chr, GError **error) if (ctx->parent.must_undo) teco_undo_flags(ctx->flags); ctx->flags.modifier_colon++; - return &teco_state_start; + TECO_RETURN(ctx, &teco_state_start, error); default: /* * <CTRL/x> commands implemented in teco_state_control */ - if (TECO_IS_CTL(chr)) - return teco_state_control_input(ctx, TECO_CTL_ECHO(chr), error); + if (TECO_IS_CTL(chr)) { + teco_state_t *next = teco_state_control_input(ctx, TECO_CTL_ECHO(chr), error); + TECO_RETURN(ctx, next, error); + } } - return teco_machine_main_transition_input(ctx, transitions, G_N_ELEMENTS(transitions), - teco_ascii_toupper(chr), error); + teco_state_t *next = teco_machine_main_transition_input(ctx, transitions, G_N_ELEMENTS(transitions), + teco_ascii_toupper(chr), error); + TECO_RETURN(ctx, next, error); } TECO_DEFINE_STATE_START(teco_state_start, @@ -1090,11 +1093,12 @@ teco_state_fcommand_input(teco_machine_main_t *ctx, gunichar chr, GError **error }; switch (chr) { - case '"': return teco_state_endcond(ctx, "F\"", error); + case '"': TECO_RETURN(ctx, teco_state_endcond(ctx, "F\"", error), error); } - return teco_machine_main_transition_input(ctx, transitions, G_N_ELEMENTS(transitions), - teco_ascii_toupper(chr), error); + teco_state_t *next = teco_machine_main_transition_input(ctx, transitions, G_N_ELEMENTS(transitions), + teco_ascii_toupper(chr), error); + TECO_RETURN(ctx, next, error); } TECO_DEFINE_STATE_COMMAND(teco_state_fcommand, @@ -1304,7 +1308,7 @@ teco_state_condcommand_input(teco_machine_main_t *ctx, gunichar chr, GError **er ctx->flags.mode = TECO_MODE_PARSE_ONLY_COND; } - return &teco_state_start; + TECO_RETURN(ctx, &teco_state_start, error); } TECO_DEFINE_STATE_COMMAND(teco_state_condcommand, @@ -1740,8 +1744,9 @@ teco_state_control_input(teco_machine_main_t *ctx, gunichar chr, GError **error) * Currently you get error messages like 'Syntax error "F"' for ^F. * The easiest way around would be g_prefix_error(error, "Control command"); */ - return teco_machine_main_transition_input(ctx, transitions, G_N_ELEMENTS(transitions), - teco_ascii_toupper(chr), error); + teco_state_t *next = teco_machine_main_transition_input(ctx, transitions, G_N_ELEMENTS(transitions), + teco_ascii_toupper(chr), error); + TECO_RETURN(ctx, next, error); } TECO_DEFINE_STATE_COMMAND(teco_state_control, @@ -1754,7 +1759,7 @@ teco_state_ascii_input(teco_machine_main_t *ctx, gunichar chr, GError **error) if (ctx->flags.mode == TECO_MODE_NORMAL) teco_expressions_push(chr); - return &teco_state_start; + TECO_RETURN(ctx, &teco_state_start, error); } /*$ ^^ ^^c @@ -1939,7 +1944,7 @@ teco_state_ctlc_input(teco_machine_main_t *ctx, gunichar chr, GError **error) { switch (chr) { case TECO_CTL_KEY('C'): return teco_state_ctlc_control_input(ctx, 'C', error); - case '^': return &teco_state_ctlc_control; + case '^': TECO_RETURN(ctx, &teco_state_ctlc_control, error); } return ctx->flags.mode > TECO_MODE_NORMAL @@ -1992,7 +1997,7 @@ teco_state_ctlc_control_input(teco_machine_main_t *ctx, gunichar chr, GError **e */ if (chr == 'c' || chr == 'C') { if (ctx->flags.mode > TECO_MODE_NORMAL) - return &teco_state_start; + TECO_RETURN(ctx, &teco_state_start, error); if (teco_undo_enabled) { g_set_error_literal(error, TECO_ERROR, TECO_ERROR_FAILED, @@ -2956,8 +2961,9 @@ teco_state_ecommand_input(teco_machine_main_t *ctx, gunichar chr, GError **error /* * FIXME: Should we return a special syntax error in case of failure? */ - return teco_machine_main_transition_input(ctx, transitions, G_N_ELEMENTS(transitions), - teco_ascii_toupper(chr), error); + teco_state_t *next = teco_machine_main_transition_input(ctx, transitions, G_N_ELEMENTS(transitions), + teco_ascii_toupper(chr), error); + TECO_RETURN(ctx, next, error); } TECO_DEFINE_STATE_COMMAND(teco_state_ecommand, |
