From 0b185e3dcd7348045787b972a80d62da4ca0c79f Mon Sep 17 00:00:00 2001
From: Peter Stephenson
Date: Thu, 8 Aug 2013 19:48:11 +0100
Subject: users/17908: Keep history line in sync between ZLE and shell. Update
ZLE version if history is read, pushed or popped with ZLE active
---
Src/Zle/zle_main.c | 7 +++++++
Src/hist.c | 10 ++++++++++
Src/zsh.h | 3 ++-
3 files changed, 19 insertions(+), 1 deletion(-)
(limited to 'Src')
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
index a1d54dd2b..756ff111a 100644
--- a/Src/Zle/zle_main.c
+++ b/Src/Zle/zle_main.c
@@ -1934,6 +1934,13 @@ zle_main_entry(int cmd, va_list ap)
break;
}
+ case ZLE_CMD_SET_HIST_LINE:
+ {
+ histline = va_arg(ap, zlong);
+
+ break;
+ }
+
default:
#ifdef DEBUG
dputs("Bad command %d in zle_main_entry", cmd);
diff --git a/Src/hist.c b/Src/hist.c
index 5e962e92f..f78c97d8f 100644
--- a/Src/hist.c
+++ b/Src/hist.c
@@ -76,6 +76,9 @@ mod_export int excs, exlast;
* and a temporary history entry is inserted while the user is editing.
* If the resulting line was not added to the list, a flag is set so
* that curhist will be decremented in hbegin().
+ *
+ * Note curhist is passed to zle on variable length argument list:
+ * type must match that retrieved in zle_main_entry.
*/
/**/
@@ -2414,6 +2417,9 @@ readhistfile(char *fn, int err, int readflags)
zerr("can't read history file %s", fn);
unlockhistfile(fn);
+
+ if (zleactive)
+ zleentry(ZLE_CMD_SET_HIST_LINE, curhist);
}
#ifdef HAVE_FCNTL_H
@@ -3339,6 +3345,8 @@ pushhiststack(char *hf, zlong hs, zlong shs, int level)
}
hist_ring = NULL;
curhist = histlinect = 0;
+ if (zleactive)
+ zleentry(ZLE_CMD_SET_HIST_LINE, curhist);
histsiz = hs;
savehistsiz = shs;
inithist(); /* sets histtab */
@@ -3378,6 +3386,8 @@ pophiststack(void)
histtab = h->histtab;
hist_ring = h->hist_ring;
curhist = h->curhist;
+ if (zleactive)
+ zleentry(ZLE_CMD_SET_HIST_LINE, curhist);
histlinect = h->histlinect;
histsiz = h->histsiz;
savehistsiz = h->savehistsiz;
diff --git a/Src/zsh.h b/Src/zsh.h
index d7b130c72..e6f0f65db 100644
--- a/Src/zsh.h
+++ b/Src/zsh.h
@@ -2756,7 +2756,8 @@ enum {
ZLE_CMD_RESET_PROMPT,
ZLE_CMD_REFRESH,
ZLE_CMD_SET_KEYMAP,
- ZLE_CMD_GET_KEY
+ ZLE_CMD_GET_KEY,
+ ZLE_CMD_SET_HIST_LINE
};
/***************************************/
--
cgit 1.4.1