diff options
Diffstat (limited to 'src/cmdline.c')
| -rw-r--r-- | src/cmdline.c | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/src/cmdline.c b/src/cmdline.c index 99bc802..a4e2189 100644 --- a/src/cmdline.c +++ b/src/cmdline.c @@ -113,6 +113,17 @@ teco_cmdline_init(void) teco_cmdline_ssm(SCI_MARGINSETTEXT, 0, (sptr_t)"*"); } +static inline void +teco_cmdline_modifier_set(gboolean modifier) +{ + if (teco_cmdline.modifier_enabled == modifier) + return; + teco_cmdline.modifier_enabled = modifier; + teco_interface_msg(TECO_MSG_INFO, + "Immediate editing modifier is now %s.", + teco_cmdline.modifier_enabled ? "enabled" : "disabled"); +} + /** * Insert string into command line and execute * it immediately. @@ -142,13 +153,6 @@ teco_cmdline_insert(const gchar *data, gsize len, GError **error) teco_cmdline_ssm(SCI_GOTOPOS, effective_len+len, 0); } else { /* discard rubbed out part of the command line */ - if (effective_len < macro_len) - /* - * Automatically disable immediate editing modifier. - * FIXME: Should we show a message as when pressing ^G? - */ - teco_cmdline.modifier_enabled = FALSE; - teco_cmdline_ssm(SCI_DELETERANGE, effective_len, macro_len - effective_len); teco_cmdline_ssm(SCI_ADDTEXT, len, (sptr_t)data); @@ -545,10 +549,7 @@ teco_state_process_edit_cmd(teco_machine_t *ctx, teco_machine_t *parent_ctx, gun case TECO_CTL_KEY('G'): /* toggle immediate editing modifier */ teco_interface_popup_clear(); - teco_cmdline.modifier_enabled = !teco_cmdline.modifier_enabled; - teco_interface_msg(TECO_MSG_INFO, - "Immediate editing modifier is now %s.", - teco_cmdline.modifier_enabled ? "enabled" : "disabled"); + teco_cmdline_modifier_set(!teco_cmdline.modifier_enabled); return TRUE; case TECO_CTL_KEY('H'): /* rubout/reinsert character */ @@ -818,16 +819,12 @@ teco_state_stringbuilding_start_process_edit_cmd(teco_machine_stringbuilding_t * g_auto(teco_string_t) new_chars, new_chars_escaped; gboolean unambiguous = teco_file_auto_complete(filename, G_FILE_TEST_EXISTS, &new_chars); teco_machine_stringbuilding_escape(ctx, new_chars.data, new_chars.len, &new_chars_escaped); - if (unambiguous) + if (unambiguous) { teco_string_append_c(&new_chars_escaped, ' '); + teco_cmdline_modifier_set(FALSE); + } - if (!teco_cmdline_insert(new_chars_escaped.data, new_chars_escaped.len, error)) - return FALSE; - - /* may be reset if there was a rubbed out command line */ - teco_cmdline.modifier_enabled = TRUE; - - return TRUE; + return teco_cmdline_insert(new_chars_escaped.data, new_chars_escaped.len, error); } } |
