summaryrefslogtreecommitdiff
path: root/Src/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/init.c')
-rw-r--r--Src/init.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/Src/init.c b/Src/init.c
index a0c06aa63..3da057de9 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -135,15 +135,23 @@ loop(int toplevel, int justonce)
if (toplevel && (preprog = getshfunc("preexec")) != &dummy_eprog) {
LinkList args;
int osc = sfcontext;
+ char *cmdstr;
args = znewlinklist();
zaddlinknode(args, "preexec");
- if (hist_ring)
+ /* If curline got dumped from the history, we don't know
+ * what the user typed. */
+ if (hist_ring && curline.histnum == curhist)
zaddlinknode(args, hist_ring->text);
+ else
+ zaddlinknode(args, "");
+ zaddlinknode(args, getjobtext(prog, NULL));
+ zaddlinknode(args, cmdstr = getpermtext(prog, NULL));
sfcontext = SFC_HOOK;
doshfunc("preexec", preprog, args, 0, 1);
sfcontext = osc;
+ zsfree(cmdstr);
freelinklist(args, (FreeFunc) NULL);
errflag = 0;
}