1
0
Fork 0
mirror of https://github.com/romkatv/powerlevel10k.git synced 2024-11-22 04:10:07 +00:00

add p9k_prompt_segment; add SELF_JOINED; delete simple_dir

This commit is contained in:
romkatv 2019-07-10 20:06:19 +02:00
parent 759030f30b
commit 9adcf809f1

View file

@ -294,10 +294,14 @@ left_prompt_segment() {
fi
_P9K_T+=$bg$s$style$left_space # 4
local join="_P9K_I>=$_P9K_LEFT_JOIN[$2]"
_p9k_param $1 SELF_JOINED false
[[ $_P9K_RETVAL == false ]] && join+="&&_P9K_I<$2"
local p=
p+="\${_P9K_N::=}\${_P9K_F::=}"
p+="\${\${\${_P9K_BG:-0}:#NONE}:-\${_P9K_N::=$((t+1))}}" # 1
p+="\${_P9K_N:=\${\${\$((_P9K_I>=$_P9K_LEFT_JOIN[$2])):#0}:+$((t+2))}}" # 2
p+="\${_P9K_N:=\${\${\$(($join)):#0}:+$((t+2))}}" # 2
p+="\${_P9K_N:=\${\${(M)\${:-x$bg_color}:#x(\$_P9K_BG|\${_P9K_BG:-0})}:+$((t+3))}}" # 3
p+="\${_P9K_N:=\${\${_P9K_F::=%F{\$_P9K_BG\}}:+$((t+4))}}" # 4
@ -449,6 +453,35 @@ right_prompt_segment() {
_P9K_PROMPT+=${_P9K_CACHE_VAL[5]}
}
function p9k_prompt_segment() {
emulate -L zsh && setopt no_hist_expand extended_glob
local opt state bg fg icon cond text sym=0 expand=0
while getopts 's:b:f:i:c:t:se' opt; do
case $opt in
s) state=$OPTARG;;
b) bg=$OPTARG;;
f) fg=$OPTARG;;
i) icon=$OPTARG;;
c) cond=${OPTARG:-'${:-}'};;
t) text=$OPTARG;;
s) sym=1;;
e) expand=1;;
+s) sym=0;;
+e) expand=0;;
?) return 1;;
done) break;;
esac
done
if (( OPTIND <= ARGC )) {
echo "usage: p9k_prompt_segment [{+|-}re] [-s state] [-b bg] [-f fg] [-i icon] [-c cond] [-t text]" >&2
return 1
}
(( sym )) || icon=$'\1'$icon
"${_P9K_PROMPT_SIDE}_prompt_segment" "prompt_${_P9K_SEGMENT_NAME}${state:+_${(U)state}}" \
"${_P9K_SEGMENT_INDEX}" "$bg" "${fg:-$DEFAULT_COLOR}" "$icon" "$expand" "$cond" "$text"
return 0
}
function _p9k_python_version() {
_p9k_cached_cmd_stdout_stderr python --version || return
[[ $_P9K_RETVAL == (#b)Python\ ([[:digit:].]##)* ]] && _P9K_RETVAL=$match[1]
@ -1510,23 +1543,6 @@ prompt_root_indicator() {
"$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" 'ROOT_ICON' 0 '${${(%):-%#}:#%}' ''
}
# This segment is a demo. It can disappear any time. Use prompt_dir instead.
prompt_simple_dir() {
if ! _p9k_cache_get "$0" "$1" "$2" ; then
local p=$_P9K_PROMPT
local key=$_P9K_CACHE_KEY
_P9K_PROMPT=''
$1_prompt_segment $0_HOME $2 blue "$DEFAULT_COLOR" HOME_ICON 0 '${$((!${#${(%):-%~}:#\~})):#0}' "%~"
$1_prompt_segment $0_HOME_SUBFOLDER $2 blue "$DEFAULT_COLOR" HOME_SUB_ICON 0 '${$((!${#${(%):-%~}:#\~?*})):#0}' "%~"
$1_prompt_segment $0_ETC $2 blue "$DEFAULT_COLOR" ETC_ICON 0 '${$((!${#${(%):-%~}:#/etc*})):#0}' "%~"
$1_prompt_segment $0_DEFAULT $2 blue "$DEFAULT_COLOR" FOLDER_ICON 0 '${${${(%):-%~}:#\~*}:#/etc*}' "%~"
_P9K_CACHE_KEY=$key
_p9k_cache_set "$_P9K_PROMPT"
_P9K_PROMPT=$p
fi
_P9K_PROMPT+=${_P9K_CACHE_VAL[1]}
}
################################################################
# Segment to display Rust version number
prompt_rust_version() {
@ -1757,7 +1773,7 @@ prompt_todo() {
# VCS segment: shows the state of your repository, if you are in a folder under
# version control
# The vcs segment can have 4 different states - defaults to 'clean'.
# The vcs segment can have 4 different states - defaults to 'CLEAN'.
typeset -gA vcs_states=(
'CLEAN' '2'
'MODIFIED' '3'
@ -2360,49 +2376,23 @@ prompt_java_version() {
################################################################
# Main prompt
set_default -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS context dir vcs
# Returns 1 if the cursor is at the very end of the screen.
build_left_prompt() {
local -i index=1
local element
for element in "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[@]}"; do
# Remove joined information in direct calls
element=${element%_joined}
# Check if it is a custom command, otherwise interpet it as
# a prompt.
if [[ $element == custom_* ]]; then
"prompt_custom" "left" "$index" $element[8,-1]
else
(( $+functions[prompt_$element] )) && "prompt_$element" "left" "$index"
fi
((++index))
done
_p9k_get_icon '' LEFT_SEGMENT_END_SEPARATOR
_p9k_left_prompt_end_line $_P9K_RETVAL%b%k%f
}
# Right prompt
set_default -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS status root_indicator background_jobs history time
build_right_prompt() {
local -i index=1
local element
for element in "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[@]}"; do
# Remove joined information in direct calls
element=${element%_joined}
typeset -g _P9K_PROMPT_SIDE _P9K_SEGMENT_NAME
typeset -gi _P9K_SEGMENT_INDEX
# Check if it is a custom command, otherwise interpet it as
# a prompt.
if [[ $element == custom_* ]]; then
"prompt_custom" "right" "$index" $element[8,-1]
else
(( $+functions[prompt_$element] )) && "prompt_$element" "right" "$index"
_p9k_build_prompt() {
_P9K_SEGMENT_INDEX=1
_P9K_PROMPT_SIDE=$1
local list=POWERLEVEL9K_${(U)_P9K_PROMPT_SIDE}_PROMPT_ELEMENTS
for _P9K_SEGMENT_NAME in ${(P)list}; do
_P9K_SEGMENT_NAME=${_P9K_SEGMENT_NAME%_joined}
if [[ $_P9K_SEGMENT_NAME == custom_* ]]; then
prompt_custom $_P9K_PROMPT_SIDE $_P9K_SEGMENT_INDEX $_P9K_SEGMENT_NAME[8,-1]
elif (( $+functions[prompt_$_P9K_SEGMENT_NAME] )); then
prompt_$_P9K_SEGMENT_NAME $_P9K_PROMPT_SIDE $_P9K_SEGMENT_INDEX
fi
((++index))
((++_P9K_SEGMENT_INDEX))
done
}
@ -2434,7 +2424,7 @@ function _p9k_set_prompt() {
_P9K_RPROMPT_DONE=1
else
_P9K_PROMPT=
build_right_prompt
_p9k_build_prompt right
local right=$_P9K_RIGHT_PREFIX$_P9K_PROMPT$_P9K_RIGHT_SUFFIX
if [[ $POWERLEVEL9K_PROMPT_ON_NEWLINE != true || $POWERLEVEL9K_RPROMPT_ON_NEWLINE == true ]]; then
RPROMPT=$right
@ -2447,7 +2437,9 @@ function _p9k_set_prompt() {
fi
_P9K_PROMPT=''
if build_left_prompt; then
_p9k_build_prompt left
_p9k_get_icon '' LEFT_SEGMENT_END_SEPARATOR
if _p9k_left_prompt_end_line $_P9K_RETVAL%b%k%f; then
PROMPT+=$_P9K_LEFT_PREFIX$_P9K_PROMPT$_P9K_LEFT_SUFFIX
else
PROMPT+=$_P9K_LEFT_PREFIX$_P9K_PROMPT${_P9K_LEFT_SUFFIX#$'\n'}