diff options
Diffstat (limited to 'src/core-commands.c')
| -rw-r--r-- | src/core-commands.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/src/core-commands.c b/src/core-commands.c index d01cbb9..d850c14 100644 --- a/src/core-commands.c +++ b/src/core-commands.c @@ -914,10 +914,8 @@ teco_state_start_input(teco_machine_main_t *ctx, gunichar chr, GError **error) /* * <CTRL/x> commands implemented in teco_state_control */ - if (TECO_IS_CTL(chr)) { - teco_state_t *next = teco_state_control_input(ctx, TECO_CTL_ECHO(chr), error); - TECO_RETURN(ctx, next, error); - } + if (TECO_IS_CTL(chr)) + TECO_TAIL return teco_state_control_input(ctx, TECO_CTL_ECHO(chr), error); } teco_state_t *next = teco_machine_main_transition_input(ctx, transitions, G_N_ELEMENTS(transitions), @@ -1828,7 +1826,7 @@ TECO_DEFINE_STATE(teco_state_ascii, * at the expense of yet another parser state. */ static teco_state_t * -teco_return(teco_machine_main_t *ctx, GError **error) +teco_throw_return(teco_machine_main_t *ctx, GError **error) { g_assert(ctx->flags.mode == TECO_MODE_NORMAL); @@ -1871,9 +1869,11 @@ teco_return(teco_machine_main_t *ctx, GError **error) static teco_state_t * teco_state_escape_input(teco_machine_main_t *ctx, gunichar chr, GError **error) { - if (chr == '\e' || chr == '$') - return ctx->flags.mode > TECO_MODE_NORMAL - ? &teco_state_start : teco_return(ctx, error); + if (chr == '\e' || chr == '$') { + if (ctx->flags.mode > TECO_MODE_NORMAL) + TECO_RETURN(ctx, &teco_state_start, error); + return teco_throw_return(ctx, error); + } /* * Alternatives: ^[, <CTRL/[>, <ESC>, $ (dollar) @@ -1900,7 +1900,7 @@ teco_state_escape_input(teco_machine_main_t *ctx, gunichar chr, GError **error) if (ctx->flags.mode == TECO_MODE_NORMAL && !teco_expressions_discard_args(error)) return NULL; - return teco_state_start_input(ctx, chr, error); + TECO_TAIL return teco_state_start_input(ctx, chr, error); } static gboolean @@ -1940,12 +1940,13 @@ static teco_state_t * 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 TECO_CTL_KEY('C'): TECO_TAIL return teco_state_ctlc_control_input(ctx, 'C', error); case '^': TECO_RETURN(ctx, &teco_state_ctlc_control, error); } - return ctx->flags.mode > TECO_MODE_NORMAL - ? teco_state_start_input(ctx, chr, error) : teco_return(ctx, error); + if (ctx->flags.mode > TECO_MODE_NORMAL) + TECO_TAIL return teco_state_start_input(ctx, chr, error); + return teco_throw_return(ctx, error); } static gboolean @@ -2009,8 +2010,9 @@ teco_state_ctlc_control_input(teco_machine_main_t *ctx, gunichar chr, GError **e return NULL; } - return ctx->flags.mode > TECO_MODE_NORMAL - ? teco_state_control_input(ctx, chr, error) : teco_return(ctx, error); + if (ctx->flags.mode > TECO_MODE_NORMAL) + TECO_TAIL return teco_state_control_input(ctx, chr, error); + return teco_throw_return(ctx, error); } /* |
