diff options
author | Geoff Wing <gcw@users.sourceforge.net> | 2001-10-24 07:00:49 +0000 |
---|---|---|
committer | Geoff Wing <gcw@users.sourceforge.net> | 2001-10-24 07:00:49 +0000 |
commit | cc28002e5411af5c33a6d91c5edcf1860cc2dcf6 (patch) | |
tree | 135bf74fb1f6172494e496b60b7b1a47e965c545 /Src/Zle | |
parent | 14e13fb40743e069e45b0790f206f14b5f8a887a (diff) | |
download | zsh-cc28002e5411af5c33a6d91c5edcf1860cc2dcf6.tar.gz zsh-cc28002e5411af5c33a6d91c5edcf1860cc2dcf6.tar.xz zsh-cc28002e5411af5c33a6d91c5edcf1860cc2dcf6.zip |
16063: add transientrprompt option to remove right prompt from
display when accepting commands
Diffstat (limited to 'Src/Zle')
-rw-r--r-- | Src/Zle/zle_main.c | 1 | ||||
-rw-r--r-- | Src/Zle/zle_refresh.c | 39 |
2 files changed, 32 insertions, 8 deletions
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c index cec6c1b4e..42c7a6bb3 100644 --- a/Src/Zle/zle_main.c +++ b/Src/Zle/zle_main.c @@ -1057,6 +1057,7 @@ trashzle(void) * extra `inlist' check]). */ int sl = showinglist; showinglist = 0; + trashedzle = 1; zrefresh(); showinglist = sl; moveto(nlnct, 0); diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c index c432907d1..7b4178ee8 100644 --- a/Src/Zle/zle_refresh.c +++ b/Src/Zle/zle_refresh.c @@ -76,6 +76,11 @@ mod_export int clearflag; /**/ mod_export int clearlist; +/* Zle in trashed state - updates may be subtly altered */ + +/**/ +int trashedzle; + #ifdef HAVE_SELECT /* cost of last update */ /**/ @@ -167,6 +172,7 @@ resetvideo(void) olnct = nlnct = 0; if (showinglist > 0) showinglist = -2; + trashedzle = 0; } /* @@ -357,6 +363,20 @@ zrefresh(void) zputs(lpromptbuf, shout); if (lpromptwof == winw) zputs("\n", shout); /* works with both hasam and !hasam */ + } else { + txtchange = pmpt_attr; + if (txtchangeisset(TXTNOBOLDFACE)) + tsetcap(TCALLATTRSOFF, 0); + if (txtchangeisset(TXTNOSTANDOUT)) + tsetcap(TCSTANDOUTEND, 0); + if (txtchangeisset(TXTNOUNDERLINE)) + tsetcap(TCUNDERLINEEND, 0); + if (txtchangeisset(TXTBOLDFACE)) + tsetcap(TCBOLDFACEBEG, 0); + if (txtchangeisset(TXTSTANDOUT)) + tsetcap(TCSTANDOUTBEG, 0); + if (txtchangeisset(TXTUNDERLINE)) + tsetcap(TCUNDERLINEBEG, 0); } if (clearflag) { zputc('\r', shout); @@ -504,11 +524,14 @@ zrefresh(void) zfree(nbuf[ln], winw + 2), nbuf[ln] = NULL; /* determine whether the right-prompt exists and can fit on the screen */ - if (!more_start) - put_rpmpt = rprompth == 1 && rpromptbuf[0] && - !strchr(rpromptbuf, '\t') && - (int)strlen(nbuf[0]) + rpromptw < winw - 1; - else { + if (!more_start) { + if (trashedzle && opts[TRANSIENTRPROMPT]) + put_rpmpt = 0; + else + put_rpmpt = rprompth == 1 && rpromptbuf[0] && + !strchr(rpromptbuf, '\t') && + (int)strlen(nbuf[0]) + rpromptw < winw - 1; + } else { /* insert >.... on first line if there is more text before start of screen */ memset(nbuf[0], ' ', lpromptw); t0 = winw - lpromptw; @@ -518,7 +541,7 @@ zrefresh(void) nbuf[0][winw] = nbuf[0][winw + 1] = '\0'; } - for (ln = 0; !clearf && (ln < nlnct); ln++) { + for (ln = 0; ln < nlnct; ln++) { /* if we have more lines than last time, clear the newly-used lines */ if (ln >= olnct) cleareol = 1; @@ -526,7 +549,7 @@ zrefresh(void) /* if old line and new line are different, see if we can insert/delete a line to speed up update */ - if (ln > 0 && ln < olnct - 1 && !(hasam && vcs == winw) && + if (!clearf && ln > 0 && ln < olnct - 1 && !(hasam && vcs == winw) && nbuf[ln] && obuf[ln] && strncmp(nbuf[ln], obuf[ln], 16)) { if (tccan(TCDELLINE) && obuf[ln + 1] && obuf[ln + 1][0] && @@ -558,6 +581,7 @@ zrefresh(void) /* output the right-prompt if appropriate */ if (put_rpmpt && !ln && !oput_rpmpt) { + oput_rpmpt = put_rpmpt; moveto(0, winw - 1 - rpromptw); zputs(rpromptbuf, shout); vcs = winw - 1; @@ -616,7 +640,6 @@ individually */ /* store current values so we can use them next time */ ovln = nvln; olnct = nlnct; - oput_rpmpt = put_rpmpt; onumscrolls = numscrolls; if (nlnct > vmaxln) vmaxln = nlnct; |