diff options
| author | Robin Haberkorn <rhaberkorn@fmsbw.de> | 2026-07-26 01:20:15 +0200 |
|---|---|---|
| committer | Robin Haberkorn <rhaberkorn@fmsbw.de> | 2026-07-26 12:28:34 +0200 |
| commit | a07512149088ec8bb47d16ed8fbbfdefd4745626 (patch) | |
| tree | aeb14e1a855b44fceb8c94a4b23488168edf8d89 | |
| parent | 0b90eb1f9a9b397ebb1960f2f03409d57154f42b (diff) | |
implemented E*q to store the last command line
`*q` can only be used at the very beginning of the command line.
We cannot support it everywhere as Video TECO did since we do
not follow the operators in parse-only mode.
`E*q` is a replacement, so you can store the previous command line at
any later point.
This also adds a test case.
| -rw-r--r-- | src/cmdline.c | 11 | ||||
| -rw-r--r-- | src/core-commands.c | 1 | ||||
| -rw-r--r-- | tests/testsuite.at | 7 |
3 files changed, 16 insertions, 3 deletions
diff --git a/src/cmdline.c b/src/cmdline.c index 8b2aebd..e7761aa 100644 --- a/src/cmdline.c +++ b/src/cmdline.c @@ -1521,12 +1521,17 @@ teco_state_save_cmdline_got_register(teco_machine_main_t *ctx, teco_qreg_t *qreg return &teco_state_start; } -/*$ *q +/*$ "*q" "E*" "E*q" * *q -- Save last command line + * E*q * - * Only at the very beginning of a command-line, this command - * may be used to save the last command line as a string in + * This command may be used to save the last command line as a string in * Q-Register <q>. + * Only at the very beginning of a command line you can also write + * \(lq*\(rq without a preceding \(lqE\(rq. + */ +/* + * FIXME: E*q is allowed but pointless in batch mode. */ TECO_DEFINE_STATE_EXPECTQREG(teco_state_save_cmdline, .expectqreg.type = TECO_QREG_OPTIONAL_INIT, diff --git a/src/core-commands.c b/src/core-commands.c index 9c70825..58a1ea2 100644 --- a/src/core-commands.c +++ b/src/core-commands.c @@ -2884,6 +2884,7 @@ teco_state_ecommand_input(teco_machine_main_t *ctx, gunichar chr, GError **error /* * Simple Transitions */ + ['*'] = {&teco_state_save_cmdline}, ['%'] = {&teco_state_epctcommand, .modifier_at = TRUE}, ['B'] = {&teco_state_edit_file, diff --git a/tests/testsuite.at b/tests/testsuite.at index cbb12d4..db2465f 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -474,6 +474,13 @@ TE_CHECK_CMDLINE([[{0EE 255@I//}]], 0, ignore, stderr) AT_FAIL_IF([! $GREP "^Error:" stderr]) AT_CLEANUP +AT_SETUP([Save last command-line]) +TE_CHECK_CMDLINE([[!hello!$$*m :Gm]], 0, stdout, ignore) +AT_FAIL_IF([! $GREP "!hello!" stdout]) +TE_CHECK_CMDLINE([[!hello!$$ E*m :Gm]], 0, stdout, ignore) +AT_FAIL_IF([! $GREP "!hello!" stdout]) +AT_CLEANUP + AT_BANNER([Standard library]) AT_SETUP([Option parser]) |
