summaryrefslogtreecommitdiff
path: root/Src/Zle/zle_hist.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Zle/zle_hist.c')
-rw-r--r--Src/Zle/zle_hist.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/Src/Zle/zle_hist.c b/Src/Zle/zle_hist.c
index 7bb5f43a6..f529e7820 100644
--- a/Src/Zle/zle_hist.c
+++ b/Src/Zle/zle_hist.c
@@ -531,10 +531,11 @@ insertlastword(char **args)
}
}
+ metafy_line();
if (lastinsert && lastlen &&
- lastpos <= zlecs &&
- lastlen == zlecs - lastpos &&
- memcmp(lastinsert, (char *)&zleline[lastpos], lastlen) == 0)
+ lastpos <= zlemetacs &&
+ lastlen == zlemetacs - lastpos &&
+ memcmp(lastinsert, (char *)&zlemetaline[lastpos], lastlen) == 0)
deleteword = 1;
else
lasthist = curhist;
@@ -548,9 +549,9 @@ insertlastword(char **args)
* confusion.
*/
if (deleteword) {
- int pos = zlecs;
- zlecs = lastpos;
- foredel(pos - zlecs);
+ int pos = zlemetacs;
+ zlemetacs = lastpos;
+ foredel(pos - zlemetacs);
/*
* Mark that this has been deleted.
* For consistency with history lines, we really ought to
@@ -604,9 +605,9 @@ insertlastword(char **args)
* successfully found a new one to insert.
*/
if (deleteword > 0) {
- int pos = zlecs;
- zlecs = lastpos;
- foredel(pos - zlecs);
+ int pos = zlemetacs;
+ zlemetacs = lastpos;
+ foredel(pos - zlemetacs);
}
if (lastinsert) {
zfree(lastinsert, lastlen);
@@ -625,13 +626,15 @@ insertlastword(char **args)
save = *t;
*t = '\0'; /* ignore trailing whitespace */
lasthist = evhist;
- lastpos = zlecs;
+ lastpos = zlemetacs;
lastlen = t - s;
lastinsert = zalloc(t - s);
memcpy(lastinsert, s, lastlen);
n = zmult;
zmult = 1;
+ unmetafy_line();
+
zs = stringaszleline((unsigned char *)s, 0, &len, NULL, NULL);
doinsert(zs, len);
free(zs);