aboutsummaryrefslogtreecommitdiff
path: root/internal/p10k.zsh
diff options
context:
space:
mode:
authorromkatv <roman.perepelitsa@gmail.com>2019-07-10 21:06:19 +0300
committerromkatv <roman.perepelitsa@gmail.com>2019-07-10 21:06:19 +0300
commit9adcf809f14af491195da2628137264ce0df537f (patch)
treec5eb9c15195737baa12c7553d862aeeaccf0336c /internal/p10k.zsh
parent759030f30b0f54760851fc82b0a209d077c11a2b (diff)
add p9k_prompt_segment; add SELF_JOINED; delete simple_dir
Diffstat (limited to 'internal/p10k.zsh')
-rwxr-xr-xinternal/p10k.zsh116
1 files changed, 54 insertions, 62 deletions
diff --git a/internal/p10k.zsh b/internal/p10k.zsh
index 9a407916..0af13c9c 100755
--- a/internal/p10k.zsh
+++ b/internal/p10k.zsh
@@ -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}
-
- # 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"
- fi
- ((++index))
+typeset -g _P9K_PROMPT_SIDE _P9K_SEGMENT_NAME
+typeset -gi _P9K_SEGMENT_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
+ ((++_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'}