make ^O work like it did before we introduced x_modified(), that is,
editing the refetched input line doesn’t let it restart (but ^R does)
This commit is contained in:
parent
e18f4d114a
commit
986d999e58
17
edit.c
17
edit.c
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.223 2011/12/04 23:22:59 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.224 2011/12/11 18:01:03 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
|
||||||
|
@ -859,6 +859,7 @@ static int xlp_valid;
|
||||||
|
|
||||||
static char **x_histp; /* history position */
|
static char **x_histp; /* history position */
|
||||||
static int x_nextcmd; /* for newline-and-next */
|
static int x_nextcmd; /* for newline-and-next */
|
||||||
|
static char **x_histncp; /* saved x_histp for " */
|
||||||
static char *xmp; /* mark pointer */
|
static char *xmp; /* mark pointer */
|
||||||
static unsigned char x_last_command;
|
static unsigned char x_last_command;
|
||||||
static unsigned char (*x_tab)[X_TABSZ]; /* key definition */
|
static unsigned char (*x_tab)[X_TABSZ]; /* key definition */
|
||||||
|
@ -1130,10 +1131,13 @@ x_emacs(char *buf, size_t len)
|
||||||
xx_cols = x_cols;
|
xx_cols = x_cols;
|
||||||
x_init_prompt();
|
x_init_prompt();
|
||||||
|
|
||||||
|
x_histncp = NULL;
|
||||||
if (x_nextcmd >= 0) {
|
if (x_nextcmd >= 0) {
|
||||||
int off = source->line - x_nextcmd;
|
int off = source->line - x_nextcmd;
|
||||||
if (histptr - history >= off)
|
if (histptr - history >= off) {
|
||||||
x_load_hist(histptr - off);
|
x_load_hist(histptr - off);
|
||||||
|
x_histncp = x_histp;
|
||||||
|
}
|
||||||
x_nextcmd = -1;
|
x_nextcmd = -1;
|
||||||
}
|
}
|
||||||
editmode = 1;
|
editmode = 1;
|
||||||
|
@ -1773,7 +1777,14 @@ x_load_hist(char **hp)
|
||||||
static int
|
static int
|
||||||
x_nl_next_com(int c MKSH_A_UNUSED)
|
x_nl_next_com(int c MKSH_A_UNUSED)
|
||||||
{
|
{
|
||||||
x_nextcmd = source->line - (histptr - x_histp) + 1;
|
/*shellf( "x_histncp = %08X\n"
|
||||||
|
"x_histp = %08X\n"
|
||||||
|
"histptr+1 = %08X\n", (uint32_t)x_histncp,
|
||||||
|
(uint32_t)x_histp, (uint32_t)(histptr + 1));*/
|
||||||
|
if (!x_histncp || (x_histp != x_histncp && x_histp != histptr + 1))
|
||||||
|
/* fresh start of ^O */
|
||||||
|
x_histncp = x_histp;
|
||||||
|
x_nextcmd = source->line - (histptr - x_histncp) + 1;
|
||||||
return (x_newline('\n'));
|
return (x_newline('\n'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue