From 16f1f616f9778cdf79f554d7107f0c3cf2c08654 Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Thu, 31 Jan 2002 15:13:26 +0000 Subject: 16494: extract outermost words with negative arguments to %_ and add %^ --- Src/prompt.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 7 deletions(-) (limited to 'Src/prompt.c') diff --git a/Src/prompt.c b/Src/prompt.c index 9b6edfcc6..06dd2e5a9 100644 --- a/Src/prompt.c +++ b/Src/prompt.c @@ -574,15 +574,54 @@ putpromptchar(int doprint, int endchar) case 'E': tsetcap(TCCLEAREOL, 1); break; + case '^': + if (cmdsp) { + if (arg >= 0) { + if (arg > cmdsp || arg == 0) + arg = cmdsp; + for (t0 = cmdsp - 1; arg--; t0--) { + stradd(cmdnames[cmdstack[t0]]); + if (arg) { + addbufspc(1); + *bp++=' '; + } + } + } else { + arg = -arg; + if (arg > cmdsp) + arg = cmdsp; + for (t0 = arg - 1; arg--; t0--) { + stradd(cmdnames[cmdstack[t0]]); + if (arg) { + addbufspc(1); + *bp++=' '; + } + } + } + } + break; case '_': if (cmdsp) { - if (arg > cmdsp || arg <= 0) - arg = cmdsp; - for (t0 = cmdsp - arg; arg--; t0++) { - stradd(cmdnames[cmdstack[t0]]); - if (arg) { - addbufspc(1); - *bp++=' '; + if (arg >= 0) { + if (arg > cmdsp || arg == 0) + arg = cmdsp; + for (t0 = cmdsp - arg; arg--; t0++) { + stradd(cmdnames[cmdstack[t0]]); + if (arg) { + addbufspc(1); + *bp++=' '; + } + } + } else { + arg = -arg; + if (arg > cmdsp) + arg = cmdsp; + for (t0 = 0; arg--; t0++) { + stradd(cmdnames[cmdstack[t0]]); + if (arg) { + addbufspc(1); + *bp++=' '; + } } } } -- cgit 1.4.1