mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-27 16:50:58 +01:00
Merge from trunk for next 4.2 release.
This commit is contained in:
parent
b63a35810c
commit
9ce24e26ea
1 changed files with 73 additions and 26 deletions
|
|
@ -2,8 +2,8 @@ zmodload -i zsh/parameter || return 1
|
||||||
|
|
||||||
prompt_bart_help () {
|
prompt_bart_help () {
|
||||||
setopt localoptions nocshnullcmd noshnullcmd
|
setopt localoptions nocshnullcmd noshnullcmd
|
||||||
[[ $ZSH_VERSION < 3.1.6-dev-20 ]] &&
|
[[ $ZSH_VERSION < 4.2.2 ]] &&
|
||||||
print 'Requires 3.1.6-dev-19 plus zsh-workers/10168.'$'\n'
|
print 'Requires ZSH_VERSION 4.2.2'$'\n'
|
||||||
<<-\EOF
|
<<-\EOF
|
||||||
This prompt gives the effect of left and right prompts on the upper
|
This prompt gives the effect of left and right prompts on the upper
|
||||||
line of a two-line prompt. It also illustrates including history
|
line of a two-line prompt. It also illustrates including history
|
||||||
|
|
@ -17,9 +17,11 @@ prompt_bart_help () {
|
||||||
given. The defaults look best on a light background.
|
given. The defaults look best on a light background.
|
||||||
|
|
||||||
The "off" token temporarily disables the theme; "on" restores it.
|
The "off" token temporarily disables the theme; "on" restores it.
|
||||||
|
No background colors or hardwired cursor motion escapes are used,
|
||||||
|
and it is not necessary to setopt promptsubst.
|
||||||
EOF
|
EOF
|
||||||
[[ $(read -Ek 1 "?${(%):-%S[press return]%s}") == [Qq] ]] &&
|
[[ $(read -sek 1 "?${(%):-%S[press return]%s}") == [Qq] ]] &&
|
||||||
print -nP $'\r'%E && return
|
print -nP '\r%E' && return
|
||||||
<<-\EOF
|
<<-\EOF
|
||||||
|
|
||||||
The "upper left prompt" looks like:
|
The "upper left prompt" looks like:
|
||||||
|
|
@ -28,6 +30,10 @@ prompt_bart_help () {
|
||||||
last command is shown in standout mode if the exit status was
|
last command is shown in standout mode if the exit status was
|
||||||
nonzero, or underlined if the job was stopped.
|
nonzero, or underlined if the job was stopped.
|
||||||
|
|
||||||
|
If the last command is too wide to fit without truncating the
|
||||||
|
current directory, it is put on a middle line by itself. The
|
||||||
|
current directory uses %~, so namedir abbreviation applies.
|
||||||
|
|
||||||
The "upper right prompt" looks like:
|
The "upper right prompt" looks like:
|
||||||
date time
|
date time
|
||||||
The fourth color is used for the date, and the first again for the
|
The fourth color is used for the date, and the first again for the
|
||||||
|
|
@ -35,8 +41,8 @@ prompt_bart_help () {
|
||||||
the upper left prompt grows too wide. The clock is not live; it
|
the upper left prompt grows too wide. The clock is not live; it
|
||||||
changes only after each command, as does the rest of the prompt.
|
changes only after each command, as does the rest of the prompt.
|
||||||
EOF
|
EOF
|
||||||
[[ $(read -Ek 1 "?${(%):-%S[press return]%s}") == [Qq] ]] &&
|
[[ $(read -sek 1 "?${(%):-%S[press return]%s}") == [Qq] ]] &&
|
||||||
print -nP $'\r'%E && return
|
print -nP '\r%E' && return
|
||||||
<<-\EOF
|
<<-\EOF
|
||||||
|
|
||||||
When RPS1 (RPROMPT) is set before this prompt is selected and a
|
When RPS1 (RPROMPT) is set before this prompt is selected and a
|
||||||
|
|
@ -44,38 +50,67 @@ prompt_bart_help () {
|
||||||
displayed and reset after it. Other color changes within RPS1, if
|
displayed and reset after it. Other color changes within RPS1, if
|
||||||
any, remain in effect.
|
any, remain in effect.
|
||||||
|
|
||||||
This prompt hijacks psvar[8] and psvar[9] to avoid having to reset
|
This prompt hijacks psvar[7] through [9] to avoid having to reset
|
||||||
the entire PS1 string on every command. It uses TRAPWINCH to set
|
the entire PS1 string on every command. It uses TRAPWINCH to set
|
||||||
the position of the upper right prompt on a window resize, so the
|
the position of the upper right prompt on a window resize, so the
|
||||||
prompt may not match the window width until the next command. No
|
prompt may not match the window width until the next command.
|
||||||
background colors or hardwired cursor motion escapes are used, and
|
|
||||||
it is not necessary to setopt promptsubst.
|
When setopt nopromptcr is in effect, an ANSI terminal protocol
|
||||||
|
exchange is attempted in order to determine the current cursor
|
||||||
|
column, and the width of the upper prompt is adjusted accordingly.
|
||||||
|
If your terminal is not ANSI compliant, this may cause unexpected
|
||||||
|
behavior, and in any case it may consume typeahead. (Recommended
|
||||||
|
workaround is to setopt promptcr.)
|
||||||
EOF
|
EOF
|
||||||
|
[[ $(read -sek 1 "?${(%):-%S[done]%s}") == $'\n' ]] ||
|
||||||
|
print -nP '\n%E'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
integer PSCOL=1
|
||||||
|
|
||||||
prompt_bart_precmd () {
|
prompt_bart_precmd () {
|
||||||
setopt localoptions noxtrace extendedglob noksharrays
|
setopt localoptions noxtrace noksharrays unset
|
||||||
|
local zero='%([BSUbsu]|{*%})' escape colno lineno
|
||||||
|
|
||||||
# Using psvar here protects against unwanted promptsubst expansions.
|
# Using psvar here protects against unwanted promptsubst expansions.
|
||||||
psvar[8]="$history[$#history]" # Use history text, not just number
|
|
||||||
psvar[9]='' # Padding before upper right prompt
|
|
||||||
|
|
||||||
repeat $[COLUMNS-${#${(%%f)${PS1//[%]\{[^%]#%\}/}}[1]}-1]
|
psvar[7]="$history[$[HISTCMD-1]]" # Use history text, not just number
|
||||||
do
|
psvar[8]='' # No padding until we compute it
|
||||||
psvar[9]="$psvar[9] "
|
psvar[9]=()
|
||||||
done
|
|
||||||
|
# Reset the truncation widths for upcoming computations
|
||||||
|
((PSCOL == 1)) || { PSCOL=1 ; prompt_bart_ps1 }
|
||||||
|
if [[ -o promptcr ]]
|
||||||
|
then
|
||||||
|
# Emulate the 4.3.x promptsp option if it isn't available
|
||||||
|
eval '[[ -o promptsp ]] 2>/dev/null' ||
|
||||||
|
print -nP "${(l.COLUMNS.. .)}\e[s${(pl.COLUMNS..\b.)}%E\e[u" >$TTY
|
||||||
|
else IFS='[;' read -s -d R escape\?$'\e[6n' lineno PSCOL <$TTY
|
||||||
|
fi
|
||||||
|
((PSCOL == 1)) || prompt_bart_ps1
|
||||||
|
((colno = COLUMNS-PSCOL))
|
||||||
|
|
||||||
|
# Compute the size of the upper left prompt and set psvar[9] if needed.
|
||||||
|
((${#${(f)${(%%)${(S)PS1//$~zero/}}}[1]} > colno)) && psvar[9]=''
|
||||||
|
|
||||||
|
# Compute and set the padding between upper left and right prompts.
|
||||||
|
(((colno -= ${#${(f)${(%%)${(S)PS1//$~zero/}}}[1]}) > 0)) &&
|
||||||
|
psvar[8]=${(l:colno:: :)}
|
||||||
}
|
}
|
||||||
|
|
||||||
prompt_bart_ps1 () {
|
prompt_bart_ps1 () {
|
||||||
|
setopt localoptions noxtrace noksharrays
|
||||||
|
|
||||||
local -ah ps1
|
local -ah ps1
|
||||||
local -h host hist dir space date time rs="%{$reset_color%}"
|
local -h host hist1 hist2 dir space date time rs="%{$reset_color%}"
|
||||||
local -h eon="%(?.[.%20(?.[%U.%S[))" eoff="%(?.].%20(?.%u].]%s))"
|
local -h eon="%(?.[.%20(?.[%U.%S[))" eoff="%(?.].%20(?.%u].]%s))"
|
||||||
|
|
||||||
# Set up the components of the upper line
|
# Set up the components of the upper line
|
||||||
host="%{$fg[%m]%}%m$rs"
|
host="%{$fg[%m]%}%m$rs"
|
||||||
hist="%{$fg[%h]%}$eon%8v$eoff$rs"
|
hist1="%9(v. . %{$fg[%h]%}$eon%7v$eoff$rs )"
|
||||||
dir="%{$fg[%~]%}%~$rs"
|
hist2=$'%9(v.\n'"%{$fg[%h]%}$eon%7v$eoff$rs.)"
|
||||||
space=%9v
|
dir="%{$fg[%~]%}%8~$rs"
|
||||||
|
space=%8v
|
||||||
date="%{$fg[%D]%}%D$rs" # Prefer "%{$fg[%D]%}%W$rs" in the USA?
|
date="%{$fg[%D]%}%D$rs" # Prefer "%{$fg[%D]%}%W$rs" in the USA?
|
||||||
time="%{$fg[%@]%}%@$rs"
|
time="%{$fg[%@]%}%@$rs"
|
||||||
|
|
||||||
|
|
@ -85,26 +120,33 @@ prompt_bart_ps1 () {
|
||||||
|
|
||||||
# Assemble the new prompt
|
# Assemble the new prompt
|
||||||
ps1=( ${(f)PS1} ) # Split the existing prompt at newlines
|
ps1=( ${(f)PS1} ) # Split the existing prompt at newlines
|
||||||
ps1=( "%$[COLUMNS-3]>..>" # Begin truncation (upper left prompt)
|
ps1=(
|
||||||
|
"%$[COLUMNS-PSCOL]>..>" # Begin truncation (upper left prompt)
|
||||||
"$host"
|
"$host"
|
||||||
" $hist " # I prefer spaces around this; do you?
|
"$hist1" # Empty when too wide for one line
|
||||||
"$dir"
|
"$dir"
|
||||||
"%<<" # End truncation (end upper left prompt)
|
"%<<" # End truncation (end upper left prompt)
|
||||||
"$space" # Pad line to upper right position
|
"$space" # Pad line to upper right position
|
||||||
"%$[COLUMNS-16](l. . $date)"
|
"%$[COLUMNS-PSCOL-15](l. . $date)"
|
||||||
"%$[COLUMNS-6](l.. $time)"
|
"%$[COLUMNS-PSCOL-7](l.. $time)"
|
||||||
|
"$hist2" # Empty when $hist1 is not empty
|
||||||
$'\n'
|
$'\n'
|
||||||
$ps1[-1] ) # Keep last line of the existing prompt
|
$ps1[-1] # Keep last line of the existing prompt
|
||||||
|
)
|
||||||
PS1="${(j::)ps1}"
|
PS1="${(j::)ps1}"
|
||||||
}
|
}
|
||||||
|
|
||||||
prompt_bart_winch () {
|
prompt_bart_winch () {
|
||||||
|
setopt localoptions noksharrays unset
|
||||||
|
|
||||||
# Delete ourself from TRAPWINCH if not using our precmd insert.
|
# Delete ourself from TRAPWINCH if not using our precmd insert.
|
||||||
[[ $functions[precmd] = *prompt_bart_precmd* ]] && prompt_bart_ps1 ||
|
[[ $functions[precmd] = *prompt_bart_precmd* ]] && prompt_bart_ps1 ||
|
||||||
functions[TRAPWINCH]="${functions[TRAPWINCH]//prompt_bart_winch}"
|
functions[TRAPWINCH]="${functions[TRAPWINCH]//prompt_bart_winch}"
|
||||||
}
|
}
|
||||||
|
|
||||||
prompt_bart_setup () {
|
prompt_bart_setup () {
|
||||||
|
setopt localoptions noksharrays unset
|
||||||
|
|
||||||
# A few extra niceties ...
|
# A few extra niceties ...
|
||||||
repeat 1 case "$1:l" in
|
repeat 1 case "$1:l" in
|
||||||
(off|disable)
|
(off|disable)
|
||||||
|
|
@ -141,4 +183,9 @@ prompt_bart_setup () {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prompt_bart_preview () {
|
||||||
|
local +h PS1='%# '
|
||||||
|
prompt_preview_theme bart "$@"
|
||||||
|
}
|
||||||
|
|
||||||
[[ -o kshautoload ]] || prompt_bart_setup "$@"
|
[[ -o kshautoload ]] || prompt_bart_setup "$@"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue