diff options
-rw-r--r-- | doc/sciteco.7.template | 3 | ||||
-rw-r--r-- | src/cmdline.c | 21 | ||||
-rw-r--r-- | src/parser.c | 9 |
3 files changed, 32 insertions, 1 deletions
diff --git a/doc/sciteco.7.template b/doc/sciteco.7.template index a476091..ca93fa6 100644 --- a/doc/sciteco.7.template +++ b/doc/sciteco.7.template @@ -1694,6 +1694,9 @@ thus refers to the corresponding control code: Escape character \fIc\fP. The character is not handled as a string building or string termination character, so for instance \(lq^Q^Q\(rq translates to \(lq^Q\(rq. +Furthermore, some immediate editing commands are inhibited right after \fB^Q\fR, +so you can type \(lq^Q^U\(rq and \(lq^Q^W\(rq, which translate to control codes +21 and 23. .TP .SCITECO_TOPIC ^V^V ^Vc lower .B ^V^V diff --git a/src/cmdline.c b/src/cmdline.c index 0d32513..d024142 100644 --- a/src/cmdline.c +++ b/src/cmdline.c @@ -651,6 +651,27 @@ teco_state_stringbuilding_start_process_edit_cmd(teco_machine_stringbuilding_t * } gboolean +teco_state_stringbuilding_escaped_process_edit_cmd(teco_machine_stringbuilding_t *ctx, teco_machine_t *parent_ctx, + gunichar key, GError **error) +{ + /* + * Allow insertion of characters that would otherwise be interpreted as + * immediate editing commands after ^Q/^R. + */ + switch (key) { + //case TECO_CTL_KEY('G'): + case TECO_CTL_KEY('W'): + case TECO_CTL_KEY('U'): + teco_interface_popup_clear(); + + gchar c = key; + return teco_cmdline_insert(&c, sizeof(c), error); + } + + return teco_state_process_edit_cmd(parent_ctx, NULL, key, error); +} + +gboolean teco_state_stringbuilding_qreg_process_edit_cmd(teco_machine_stringbuilding_t *ctx, teco_machine_t *parent_ctx, gunichar chr, GError **error) { diff --git a/src/parser.c b/src/parser.c index 15d9f5e..7ba9876 100644 --- a/src/parser.c +++ b/src/parser.c @@ -499,7 +499,14 @@ teco_state_stringbuilding_escaped_input(teco_machine_stringbuilding_t *ctx, guni return &teco_state_stringbuilding_start; } -TECO_DEFINE_STATE(teco_state_stringbuilding_escaped); +/* in cmdline.c */ +gboolean teco_state_stringbuilding_escaped_process_edit_cmd(teco_machine_stringbuilding_t *ctx, teco_machine_t *parent_ctx, + gunichar key, GError **error); + +TECO_DEFINE_STATE(teco_state_stringbuilding_escaped, + .process_edit_cmd_cb = (teco_state_process_edit_cmd_cb_t) + teco_state_stringbuilding_escaped_process_edit_cmd +); static teco_state_t * teco_state_stringbuilding_lower_ctl_input(teco_machine_stringbuilding_t *ctx, gunichar chr, GError **error) |