1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-10 20:11:16 +01:00

16198: add %j prompt expansion and j test character for no. of jobs in prompt

This commit is contained in:
Oliver Kiddle 2001-11-02 12:35:32 +00:00
parent f3f81f0837
commit 19d2273cb7
4 changed files with 50 additions and 19 deletions

View file

@ -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

View file

@ -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.)

View file

@ -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 )
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
prompt_opts=( cr subst percent )
PS1="%{$pcol%}$user$host%~ [%h%0(?..:%?)]%# %{$tcol%}"
[[ "${(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 a host="%m:" user="%n "
[[ $HOST == (${(j(|))~normal_hosts}) ]] && host=""
[[ ${USER:-`whoami`} == (root|${(j(|))~normal_users}) ]] && user=""
PS1="%{$pcolr%}$user$host%~%"'$((COLUMNS-12))'"(l.$prompt_newline. )[%h%1(j.%%%j.)%0(?..:%?)]%# %{$tcolr%}"
}
prompt_oliver_setup "$@"

View file

@ -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")))