summaryrefslogtreecommitdiffstats
path: root/Src/Zle/zle_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Zle/zle_main.c')
-rw-r--r--Src/Zle/zle_main.c39
1 files changed, 29 insertions, 10 deletions
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
index 99ee3c804..6cea57112 100644
--- a/Src/Zle/zle_main.c
+++ b/Src/Zle/zle_main.c
@@ -1215,9 +1215,10 @@ zlecore(void)
char *
zleread(char **lp, char **rp, int flags, int context, char *init, char *finish)
{
- char *s, **bracket;
+ char *s;
int old_errno = errno;
int tmout = getiparam("TMOUT");
+ const char **markers = prompt_markers();
#if defined(HAVE_POLL) || defined(HAVE_SELECT)
/* may not be set, but that's OK since getiparam() returns 0 == off */
@@ -1232,7 +1233,7 @@ zleread(char **lp, char **rp, int flags, int context, char *init, char *finish)
char *pptbuf;
int pptlen;
- pptbuf = unmetafy(promptexpand(lp ? *lp : NULL, 0, NULL, NULL),
+ pptbuf = unmetafy(promptexpand(lp ? *lp : NULL, 0, NULL, NULL, NULL),
&pptlen);
pmpt_attr = txtcurrentattrs;
write_loop(2, pptbuf, pptlen);
@@ -1270,10 +1271,11 @@ zleread(char **lp, char **rp, int flags, int context, char *init, char *finish)
trashedzle = 0;
raw_lp = lp;
txtcurrentattrs = txtpendingattrs = txtunknownattrs = 0;
- lpromptbuf = promptexpand(lp ? *lp : NULL, 1, NULL, NULL);
+ lpromptbuf = promptexpand(lp ? *lp : NULL, 1,
+ markers[flags == ZLCON_LINE_CONT ? 2 : 1], NULL, NULL);
pmpt_attr = txtcurrentattrs;
raw_rp = rp;
- rpromptbuf = promptexpand(rp ? *rp : NULL, 1, NULL, NULL);
+ rpromptbuf = promptexpand(rp ? *rp : NULL, 1, markers[2], NULL, NULL);
rpmpt_attr = txtcurrentattrs;
prompt_attr = mixattrs(pmpt_attr, rpmpt_attr);
free_prepostdisplay();
@@ -1344,6 +1346,10 @@ zleread(char **lp, char **rp, int flags, int context, char *init, char *finish)
prefixflag = 0;
region_active = 0;
+ /* semantic prompt marker printed before first prompt */
+ if (*markers)
+ write_loop(2, *markers, strlen(*markers));
+
zrefresh();
unqueue_signals(); /* Should now be safe to acknowledge SIGWINCH */
@@ -1353,8 +1359,7 @@ zleread(char **lp, char **rp, int flags, int context, char *init, char *finish)
if (zleline && *zleline)
redrawhook();
- if ((bracket = getaparam("zle_bracketed_paste")) && arrlen(bracket) == 2)
- fputs(*bracket, shout);
+ start_edit();
zrefresh();
@@ -1365,8 +1370,7 @@ zleread(char **lp, char **rp, int flags, int context, char *init, char *finish)
"ZLE_VARED_ABORTED" :
"ZLE_LINE_ABORTED", zlegetline(NULL, NULL));
- if ((bracket = getaparam("zle_bracketed_paste")) && arrlen(bracket) == 2)
- fputs(bracket[1], shout);
+ end_edit();
if (done && !exit_pending && !errflag)
zlecallhook(finish, NULL);
@@ -1895,11 +1899,13 @@ describekeybriefly(UNUSED(char **args))
return 1;
clearlist = 1;
statusline = "Describe key briefly: _";
+ start_edit();
zrefresh();
if (invicmdmode() && region_active && (km = openkeymap("visual")))
selectlocalmap(km);
seq = getkeymapcmd(curkeymap, &func, &str);
selectlocalmap(NULL);
+ end_edit();
statusline = NULL;
if(!*seq)
return 1;
@@ -1997,6 +2003,7 @@ reexpandprompt(void)
static int looping;
if (!reexpanding++) {
+ const char **markers = prompt_markers();
/*
* If we're displaying a status in the prompt, it
* needs to be the toplevel one, not the one from
@@ -2015,7 +2022,7 @@ reexpandprompt(void)
looping = reexpanding;
txtcurrentattrs = txtpendingattrs = txtunknownattrs = 0;
- new_lprompt = promptexpand(raw_lp ? *raw_lp : NULL, 1, NULL, NULL);
+ new_lprompt = promptexpand(raw_lp ? *raw_lp : NULL, 1, markers[0], NULL, NULL);
pmpt_attr = txtcurrentattrs;
free(lpromptbuf);
lpromptbuf = new_lprompt;
@@ -2023,7 +2030,7 @@ reexpandprompt(void)
if (looping != reexpanding)
continue;
- new_rprompt = promptexpand(raw_rp ? *raw_rp : NULL, 1, NULL, NULL);
+ new_rprompt = promptexpand(raw_rp ? *raw_rp : NULL, 1, markers[2], NULL, NULL);
rpmpt_attr = txtcurrentattrs;
prompt_attr = mixattrs(pmpt_attr, rpmpt_attr);
free(rpromptbuf);
@@ -2177,6 +2184,18 @@ zle_main_entry(int cmd, va_list ap)
break;
}
+ case ZLE_CMD_PREEXEC:
+ mark_output(1);
+ break;
+
+ case ZLE_CMD_POSTEXEC:
+ mark_output(0);
+ break;
+
+ case ZLE_CMD_CHPWD:
+ notify_pwd();
+ break;
+
default:
#ifdef DEBUG
dputs("Bad command %d in zle_main_entry", cmd);