diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmdline.c | 6 | ||||
| -rw-r--r-- | src/parser.c | 15 |
2 files changed, 17 insertions, 4 deletions
diff --git a/src/cmdline.c b/src/cmdline.c index e7761aa..7fe044c 100644 --- a/src/cmdline.c +++ b/src/cmdline.c @@ -1475,6 +1475,9 @@ teco_state_help_process_edit_cmd(teco_machine_main_t *ctx, teco_machine_t *paren g_auto(teco_string_t) new_chars, new_chars_escaped; gboolean unambiguous = teco_help_auto_complete(ctx->expectstring.string.data, &new_chars); + /* + * FIXME: The help command (?) does not have string building characters. + */ teco_machine_stringbuilding_escape(stringbuilding_ctx, new_chars.data, new_chars.len, &new_chars_escaped); if (unambiguous && ctx->expectstring.nesting == 1) teco_string_append_wc(&new_chars_escaped, @@ -1492,6 +1495,9 @@ teco_state_help_insert_completion(teco_machine_main_t *ctx, teco_string_t str, G { teco_machine_stringbuilding_t *stringbuilding_ctx = &ctx->expectstring.machine; + /* + * FIXME: The help command (?) does not have string building characters. + */ g_auto(teco_string_t) str_escaped; teco_machine_stringbuilding_escape(stringbuilding_ctx, str.data, str.len, &str_escaped); if (ctx->expectstring.nesting == 1) diff --git a/src/parser.c b/src/parser.c index 32e60cd..8b02764 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1023,9 +1023,11 @@ teco_machine_stringbuilding_reset(teco_machine_stringbuilding_t *ctx) ctx->mode = TECO_STRINGBUILDING_MODE_NORMAL; } -/* - * If we case folded only ANSI characters as in teco_ascii_toupper(), - * this could be simplified. +/** + * Escape string so it can be inserted into a command's string argument + * or Q-Register specification. + * + * This is used for auto-completions and when clicking into auto-completion popups. */ void teco_machine_stringbuilding_escape(teco_machine_stringbuilding_t *ctx, const gchar *str, gsize len, @@ -1038,13 +1040,18 @@ teco_machine_stringbuilding_escape(teco_machine_stringbuilding_t *ctx, const gch gunichar chr = g_utf8_get_char(str+i); /* + * If we case folded only ANSI characters as in teco_ascii_toupper(), + * this could be simplified. + * * NOTE: We support both `[` and `{`, so this works for autocompleting * long Q-register specifications as well. * This may therefore insert unnecessary ^Q, but they won't hurt. */ if (g_unichar_toupper(chr) == ctx->escape_char || (ctx->escape_char == '[' && chr == ']') || - (ctx->escape_char == '{' && chr == '}')) + (ctx->escape_char == '{' && chr == '}') || + /* magic characters: ^P, ^Q, ^R, ^V, ^W, ^E */ + (chr != TECO_CTL_KEY('@') && strchr("^\x10\x11\x12\x16\x17\x05", chr))) target->data[target->len++] = TECO_CTL_KEY('Q'); gsize lenc = g_utf8_next_char(str+i) - (str+i); |
