aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/cmdline.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmdline.c')
-rw-r--r--src/cmdline.c35
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);
}
}