diff options
author | Oliver Kiddle <opk@users.sourceforge.net> | 2001-11-02 12:35:32 +0000 |
---|---|---|
committer | Oliver Kiddle <opk@users.sourceforge.net> | 2001-11-02 12:35:32 +0000 |
commit | 19d2273cb7bdde0b13a8858ec8c4f264a2bb11b4 (patch) | |
tree | 3b66e84c8560e38fe7d13c2fb22b73decc43ded5 | |
parent | f3f81f0837e9c10ec9fd0808e8640ab8a23b7ba8 (diff) | |
download | zsh-19d2273cb7bdde0b13a8858ec8c4f264a2bb11b4.tar.gz zsh-19d2273cb7bdde0b13a8858ec8c4f264a2bb11b4.tar.xz zsh-19d2273cb7bdde0b13a8858ec8c4f264a2bb11b4.zip |
16198: add %j prompt expansion and j test character for no. of jobs in prompt
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Doc/Zsh/prompt.yo | 4 | ||||
-rw-r--r-- | Functions/Prompts/prompt_oliver_setup | 40 | ||||
-rw-r--r-- | Src/prompt.c | 17 |
4 files changed, 49 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog index 41635f6ff..24d7a4db1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2001-11-02 Oliver Kiddle <opk@zsh.org> + * unposted: Functions/Prompts/prompt_oliver_setup, + Doc/Zsh/prompt.yo: documentation and example for 16198 + + * 16198: Src/prompt.c: add %j prompt expansion and j test + character for putting the number of jobs in the prompt + * 16177: Completion/Unix/Type/_time_zone: also look in /usr/lib/locale/TZ for time zones diff --git a/Doc/Zsh/prompt.yo b/Doc/Zsh/prompt.yo index a62418277..cb4609240 100644 --- a/Doc/Zsh/prompt.yo +++ b/Doc/Zsh/prompt.yo @@ -111,6 +111,9 @@ The line number currently being executed in the script, sourced file, or shell function given by tt(%N). This is most useful for debugging as part of tt($PS4). ) +item(tt(%j))( +The number of jobs. +) item(tt(%L))( The current value of tt($SHLVL). ) @@ -222,6 +225,7 @@ least var(n) elements.) sitem(tt(D))(True if the month is equal to var(n) (January = 0).) sitem(tt(d))(True if the day of the month is equal to var(n).) sitem(tt(g))(True if the effective gid of the current process is var(n).) +sitem(tt(j))(True if the number of jobs is at least var(n).) sitem(tt(L))(True if the tt(SHLVL) parameter is at least var(n).) sitem(tt(l))(True if at least var(n) characters have already been printed on the current line.) diff --git a/Functions/Prompts/prompt_oliver_setup b/Functions/Prompts/prompt_oliver_setup index 1f4e598fc..c4a28b705 100644 --- a/Functions/Prompts/prompt_oliver_setup +++ b/Functions/Prompts/prompt_oliver_setup @@ -1,35 +1,41 @@ # oliver prompt theme prompt_oliver_help() { - cat - <<ENDHELP + cat <<'ENDHELP' With this prompt theme, the prompt contains the current directory, -history number and the previous command\'s exit code (if non-zero) -and a final character which depends on priviledges. +history number, number of jobs (if non-zero) and the previous +command's exit code (if non-zero) and a final character which +depends on priviledges. The colour of the prompt depends on two associative arrays - -\$pcolour and $\tcolour. Each array is indexed by the name of the +$pcolour and $tcolour. Each array is indexed by the name of the local host. Alternatively, the colour can be set with parameters -to prompt. +to prompt. To specify colours, use English words like 'yellow', +optionally preceded by 'bold'. The hostname and username are also included unless they are in the -\$normal_hosts or \$normal_users array. +$normal_hosts or $normal_users array. ENDHELP } prompt_oliver_setup() { - prompt_opts=( percent set ) + prompt_opts=( cr subst percent ) + + [[ "${(t)pcolour}" != assoc* ]] && typeset -Ag pcolour + [[ "${(t)tcolour}" != assoc* ]] && typeset -Ag tcolour + local pcol=${1:-${pcolour[${HOST:=`hostname`}]:-yellow}} + local pcolr=$fg[${pcol#bold}] + [[ $pcol = bold* ]] && pcolr=$bold_color$pcolr + + local tcol=${2:-${tcolour[$HOST]:-white}} + local tcolr=$reset_color$fg[${tcol#bold}] + [[ $tcol = bold* ]] && tcolr=$tcolr$bold_color - local pcol=$'\e['${1:-${pcolour[${HOST:=`hostname`}]:-33}}m - local tcol=$'\e['${2:-${tcolour[$HOST]:-37}}m - local a host="%M:" user="%n " - for a in $normal_hosts; do - [[ $HOST == $a ]] && host="" - done - for a in root $normal_users; do - [[ ${USER:-`whoami`} == $a ]] && user="" - done + local a host="%m:" user="%n " + [[ $HOST == (${(j(|))~normal_hosts}) ]] && host="" + [[ ${USER:-`whoami`} == (root|${(j(|))~normal_users}) ]] && user="" - PS1="%{$pcol%}$user$host%~ [%h%0(?..:%?)]%# %{$tcol%}" + PS1="%{$pcolr%}$user$host%~%"'$((COLUMNS-12))'"(l.$prompt_newline. )[%h%1(j.%%%j.)%0(?..:%?)]%# %{$tcolr%}" } prompt_oliver_setup "$@" diff --git a/Src/prompt.c b/Src/prompt.c index d5df9d1ce..9b6edfcc6 100644 --- a/Src/prompt.c +++ b/Src/prompt.c @@ -202,7 +202,7 @@ static int putpromptchar(int doprint, int endchar) { char *ss, *tmbuf = NULL, *hostnam; - int t0, arg, test, sep; + int t0, arg, test, sep, j, numjobs; struct tm *tm; time_t timet; Nameddir nd; @@ -286,6 +286,13 @@ putpromptchar(int doprint, int endchar) if (getegid() == arg) test = 1; break; + case 'j': + for (numjobs = 0, j = 1; j < MAXJOB; j++) + if (jobtab[j].stat && jobtab[j].procs && + !(jobtab[j].stat & STAT_NOPRINT)) numjobs++; + if (numjobs >= arg) + test = 1; + break; case 'l': *bp = '\0'; countprompt(bufline, &t0, 0, 0); @@ -371,6 +378,14 @@ putpromptchar(int doprint, int endchar) sprintf(bp, "%d", curhist); bp += strlen(bp); break; + case 'j': + for (numjobs = 0, j = 1; j < MAXJOB; j++) + if (jobtab[j].stat && jobtab[j].procs && + !(jobtab[j].stat & STAT_NOPRINT)) numjobs++; + addbufspc(DIGBUFSIZE); + sprintf(bp, "%d", numjobs); + bp += strlen(bp); + break; case 'M': queue_signals(); if ((hostnam = getsparam("HOST"))) |