fix prev-hist-word again, thanks Jörg-Volker Peetz
This commit is contained in:
parent
d4658a569e
commit
4e0f597b5d
32
edit.c
32
edit.c
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.203 2011/02/03 15:57:50 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.204 2011/02/09 13:08:16 tg Exp $");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* in later versions we might use libtermcap for this, but since external
|
* in later versions we might use libtermcap for this, but since external
|
||||||
|
@ -854,7 +854,7 @@ static int x_adj_done;
|
||||||
static int x_col;
|
static int x_col;
|
||||||
static int x_displen;
|
static int x_displen;
|
||||||
static int x_arg; /* general purpose arg */
|
static int x_arg; /* general purpose arg */
|
||||||
static int x_arg_defaulted; /* x_arg not explicitly set; defaulted to 1 */
|
static bool x_arg_defaulted; /* x_arg not explicitly set; defaulted to 1 */
|
||||||
|
|
||||||
static int xlp_valid;
|
static int xlp_valid;
|
||||||
|
|
||||||
|
@ -1160,7 +1160,7 @@ x_emacs(char *buf, size_t len)
|
||||||
if (!(x_ftab[f].xf_flags & XF_PREFIX) &&
|
if (!(x_ftab[f].xf_flags & XF_PREFIX) &&
|
||||||
x_last_command != XFUNC_set_arg) {
|
x_last_command != XFUNC_set_arg) {
|
||||||
x_arg = 1;
|
x_arg = 1;
|
||||||
x_arg_defaulted = 1;
|
x_arg_defaulted = true;
|
||||||
}
|
}
|
||||||
i = c | (x_curprefix << 8);
|
i = c | (x_curprefix << 8);
|
||||||
x_curprefix = 0;
|
x_curprefix = 0;
|
||||||
|
@ -2264,7 +2264,7 @@ x_vt_hack(int c)
|
||||||
switch ((c = x_e_getc())) {
|
switch ((c = x_e_getc())) {
|
||||||
case '~':
|
case '~':
|
||||||
x_arg = 1;
|
x_arg = 1;
|
||||||
x_arg_defaulted = 1;
|
x_arg_defaulted = true;
|
||||||
return (x_mv_begin(0));
|
return (x_mv_begin(0));
|
||||||
case ';':
|
case ';':
|
||||||
/* "interesting" sequence detected */
|
/* "interesting" sequence detected */
|
||||||
|
@ -2874,20 +2874,24 @@ x_e_puts(const char *s)
|
||||||
static int
|
static int
|
||||||
x_set_arg(int c)
|
x_set_arg(int c)
|
||||||
{
|
{
|
||||||
int n = 0, first = 1;
|
int n = 0;
|
||||||
|
bool first = true;
|
||||||
|
|
||||||
/* strip command prefix */
|
/* strip command prefix */
|
||||||
c &= 255;
|
c &= 255;
|
||||||
for (; c >= 0 && ksh_isdigit(c); c = x_e_getc(), first = 0)
|
while (c >= 0 && ksh_isdigit(c)) {
|
||||||
n = n * 10 + (c - '0');
|
n = n * 10 + (c - '0');
|
||||||
|
c = x_e_getc();
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
if (c < 0 || first) {
|
if (c < 0 || first) {
|
||||||
x_e_putc2(7);
|
x_e_putc2(7);
|
||||||
x_arg = 1;
|
x_arg = 1;
|
||||||
x_arg_defaulted = 1;
|
x_arg_defaulted = true;
|
||||||
} else {
|
} else {
|
||||||
x_e_ungetc(c);
|
x_e_ungetc(c);
|
||||||
x_arg = n;
|
x_arg = n;
|
||||||
x_arg_defaulted = 0;
|
x_arg_defaulted = false;
|
||||||
}
|
}
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
|
@ -2996,13 +3000,16 @@ x_prev_histword(int c MKSH_A_UNUSED)
|
||||||
char *rcp, *cp;
|
char *rcp, *cp;
|
||||||
char **xhp;
|
char **xhp;
|
||||||
int m = 1;
|
int m = 1;
|
||||||
|
/* -1 = defaulted; 0+ = argument */
|
||||||
|
static int last_arg = -1;
|
||||||
|
|
||||||
if (x_last_command == XFUNC_prev_histword) {
|
if (x_last_command == XFUNC_prev_histword) {
|
||||||
if (xmp && modified > 1)
|
if (xmp && modified > 1)
|
||||||
x_kill_region(0);
|
x_kill_region(0);
|
||||||
if (modified)
|
if (modified)
|
||||||
m = modified;
|
m = modified;
|
||||||
}
|
} else
|
||||||
|
last_arg = x_arg_defaulted ? -1 : x_arg;
|
||||||
xhp = histptr - (m - 1);
|
xhp = histptr - (m - 1);
|
||||||
if ((xhp < history) || !(cp = *xhp)) {
|
if ((xhp < history) || !(cp = *xhp)) {
|
||||||
x_e_putc2(7);
|
x_e_putc2(7);
|
||||||
|
@ -3010,7 +3017,9 @@ x_prev_histword(int c MKSH_A_UNUSED)
|
||||||
return (KSTD);
|
return (KSTD);
|
||||||
}
|
}
|
||||||
x_set_mark(0);
|
x_set_mark(0);
|
||||||
if (x_arg_defaulted) {
|
if ((x_arg = last_arg) == -1) {
|
||||||
|
/* x_arg_defaulted */
|
||||||
|
|
||||||
rcp = &cp[strlen(cp) - 1];
|
rcp = &cp[strlen(cp) - 1];
|
||||||
/*
|
/*
|
||||||
* ignore white-space after the last word
|
* ignore white-space after the last word
|
||||||
|
@ -3023,6 +3032,7 @@ x_prev_histword(int c MKSH_A_UNUSED)
|
||||||
rcp++;
|
rcp++;
|
||||||
x_ins(rcp);
|
x_ins(rcp);
|
||||||
} else {
|
} else {
|
||||||
|
/* not x_arg_defaulted */
|
||||||
char ch;
|
char ch;
|
||||||
|
|
||||||
rcp = cp;
|
rcp = cp;
|
||||||
|
@ -3031,7 +3041,7 @@ x_prev_histword(int c MKSH_A_UNUSED)
|
||||||
*/
|
*/
|
||||||
while (*rcp && is_cfs(*rcp))
|
while (*rcp && is_cfs(*rcp))
|
||||||
rcp++;
|
rcp++;
|
||||||
while (x_arg-- > 1) {
|
while (x_arg-- > 0) {
|
||||||
while (*rcp && !is_cfs(*rcp))
|
while (*rcp && !is_cfs(*rcp))
|
||||||
rcp++;
|
rcp++;
|
||||||
while (*rcp && is_cfs(*rcp))
|
while (*rcp && is_cfs(*rcp))
|
||||||
|
|
12
mksh.1
12
mksh.1
|
@ -1,4 +1,4 @@
|
||||||
.\" $MirOS: src/bin/mksh/mksh.1,v 1.247 2011/01/21 22:25:33 tg Exp $
|
.\" $MirOS: src/bin/mksh/mksh.1,v 1.248 2011/02/09 13:08:18 tg Exp $
|
||||||
.\" $OpenBSD: ksh.1,v 1.138 2010/09/20 07:41:17 jmc Exp $
|
.\" $OpenBSD: ksh.1,v 1.138 2010/09/20 07:41:17 jmc Exp $
|
||||||
.\"-
|
.\"-
|
||||||
.\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
.\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
||||||
|
@ -72,7 +72,7 @@
|
||||||
.\" with -mandoc, it might implement .Mx itself, but we want to
|
.\" with -mandoc, it might implement .Mx itself, but we want to
|
||||||
.\" use our own definition. And .Dd must come *first*, always.
|
.\" use our own definition. And .Dd must come *first*, always.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: January 21 2011 $
|
.Dd $Mdocdate: February 9 2011 $
|
||||||
.\"
|
.\"
|
||||||
.\" Check which macro package we use
|
.\" Check which macro package we use
|
||||||
.\"
|
.\"
|
||||||
|
@ -5294,10 +5294,10 @@ Introduces a 2-character command sequence.
|
||||||
.Op Ar n
|
.Op Ar n
|
||||||
.No \*(ha[. , \*(ha[_
|
.No \*(ha[. , \*(ha[_
|
||||||
.Xc
|
.Xc
|
||||||
The last
|
The last word, or, if given, the
|
||||||
.Pq Ar n Ns th
|
.Ar n Ns th
|
||||||
word of the previous (on repeated execution, second-last, third-last, etc.)
|
word (zero-based) of the previous (on repeated execution, second-last,
|
||||||
command is inserted at the cursor.
|
third-last, etc.) command is inserted at the cursor.
|
||||||
Use of this editing command trashes the mark.
|
Use of this editing command trashes the mark.
|
||||||
.It quote: \*(ha\*(ha , \*(haV
|
.It quote: \*(ha\*(ha , \*(haV
|
||||||
The following character is taken literally rather than as an editing command.
|
The following character is taken literally rather than as an editing command.
|
||||||
|
|
Loading…
Reference in New Issue