mirror of
https://github.com/romkatv/powerlevel10k.git
synced 2024-11-11 00:00:06 +00:00
speed up prompt scaffolding
This commit is contained in:
parent
ef1f958f2c
commit
630ca49cf4
1 changed files with 44 additions and 40 deletions
|
@ -1964,52 +1964,24 @@ typeset -gF _P9K_TIMER_START
|
|||
powerlevel9k_preexec() { _P9K_TIMER_START=$EPOCHREALTIME }
|
||||
|
||||
typeset -g _P9K_PROMPT
|
||||
typeset -g _P9K_LEFT_PREFIX
|
||||
typeset -g _P9K_LEFT_SUFFIX
|
||||
typeset -g _P9K_RIGHT_PREFIX
|
||||
typeset -g _P9K_RIGHT_SUFFIX
|
||||
|
||||
set_default POWERLEVEL9K_DISABLE_RPROMPT false
|
||||
typeset -fH _p9k_set_prompt() {
|
||||
_P9K_PROMPT=''
|
||||
build_left_prompt
|
||||
local left=$_P9K_PROMPT
|
||||
_P9K_PROMPT=''
|
||||
build_right_prompt
|
||||
local right=$_P9K_PROMPT
|
||||
PROMPT=$_P9K_LEFT_PREFIX$_P9K_PROMPT$_P9K_LEFT_SUFFIX
|
||||
|
||||
local NEWLINE=$'\n'
|
||||
local RPROMPT_SUFFIX RPROMPT_PREFIX
|
||||
if [[ "$POWERLEVEL9K_PROMPT_ON_NEWLINE" == true ]]; then
|
||||
_p9k_get_icon MULTILINE_FIRST_PROMPT_PREFIX
|
||||
PROMPT="$_P9K_RETVAL%f%b%k$left$NEWLINE"
|
||||
_p9k_get_icon MULTILINE_LAST_PROMPT_PREFIX
|
||||
PROMPT+=$_P9K_RETVAL
|
||||
if [[ "$POWERLEVEL9K_RPROMPT_ON_NEWLINE" != true ]]; then
|
||||
# The right prompt should be on the same line as the first line of the left
|
||||
# prompt. To do so, there is just a quite ugly workaround: Before zsh draws
|
||||
# the RPROMPT, we advise it, to go one line up. At the end of RPROMPT, we
|
||||
# advise it to go one line down. See:
|
||||
# http://superuser.com/questions/357107/zsh-right-justify-in-ps1
|
||||
local LC_ALL="" LC_CTYPE="en_US.UTF-8" # Set the right locale to protect special characters
|
||||
RPROMPT_PREFIX='%{'$'\e[1A''%}' # one line up
|
||||
RPROMPT_SUFFIX='%{'$'\e[1B''%}' # one line down
|
||||
else
|
||||
RPROMPT_PREFIX=''
|
||||
RPROMPT_SUFFIX=''
|
||||
fi
|
||||
if [[ $POWERLEVEL9K_DISABLE_RPROMPT == true ]]; then
|
||||
RPROMPT=''
|
||||
else
|
||||
PROMPT="%f%b%k$left"
|
||||
RPROMPT_PREFIX=''
|
||||
RPROMPT_SUFFIX=''
|
||||
_P9K_PROMPT=''
|
||||
build_right_prompt
|
||||
RPROMPT=$_P9K_RIGHT_PREFIX$_P9K_PROMPT$_P9K_RIGHT_SUFFIX
|
||||
fi
|
||||
|
||||
if [[ "$POWERLEVEL9K_DISABLE_RPROMPT" != true ]]; then
|
||||
RPROMPT="${RPROMPT_PREFIX}%f%b%k$right%{$reset_color%}${RPROMPT_SUFFIX}"
|
||||
fi
|
||||
|
||||
if [[ $POWERLEVEL9K_PROMPT_ADD_NEWLINE == true ]]; then
|
||||
local NEWLINES=""
|
||||
repeat ${POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT:-1} { NEWLINES+=$NEWLINE }
|
||||
PROMPT="$NEWLINES$PROMPT"
|
||||
fi
|
||||
|
||||
# Allow iTerm integration to work
|
||||
[[ $ITERM_SHELL_INTEGRATION_INSTALLED == "Yes" ]] && PROMPT="%{$(iterm2_prompt_mark)%}$PROMPT"
|
||||
}
|
||||
|
||||
typeset -g _P9K_REFRESH_REASON
|
||||
|
@ -2135,6 +2107,38 @@ _p9k_init() {
|
|||
fi
|
||||
done
|
||||
|
||||
local RPROMPT_SUFFIX RPROMPT_PREFIX
|
||||
if [[ $POWERLEVEL9K_PROMPT_ON_NEWLINE == true ]]; then
|
||||
_p9k_get_icon MULTILINE_FIRST_PROMPT_PREFIX
|
||||
_P9K_LEFT_PREFIX="$_P9K_RETVAL%f%b%k"
|
||||
#PROMPT="$_P9K_RETVAL%f%b%k$left$NEWLINE"
|
||||
_p9k_get_icon MULTILINE_LAST_PROMPT_PREFIX
|
||||
_P9K_LEFT_SUFFIX=$'\n'$_P9K_RETVAL
|
||||
if [[ $POWERLEVEL9K_RPROMPT_ON_NEWLINE != true ]]; then
|
||||
# The right prompt should be on the same line as the first line of the left
|
||||
# prompt. To do so, there is just a quite ugly workaround: Before zsh draws
|
||||
# the RPROMPT, we advise it, to go one line up. At the end of RPROMPT, we
|
||||
# advise it to go one line down. See:
|
||||
# http://superuser.com/questions/357107/zsh-right-justify-in-ps1
|
||||
local LC_ALL="" LC_CTYPE="en_US.UTF-8" # Set the right locale to protect special characters
|
||||
_P9K_RIGHT_PREFIX='%{'$'\e[1A''%}' # one line up
|
||||
_P9K_RIGHT_SUFFIX='%{'$'\e[1B''%}' # one line down
|
||||
fi
|
||||
else
|
||||
_P9K_LEFT_PREFIX="%f%b%k"
|
||||
fi
|
||||
|
||||
if [[ $ITERM_SHELL_INTEGRATION_INSTALLED == Yes ]]; then
|
||||
_P9K_LEFT_PREFIX="%{$(iterm2_prompt_mark)%}$_P9K_LEFT_PREFIX"
|
||||
fi
|
||||
|
||||
_P9K_RIGHT_PREFIX+="%f%b%k"
|
||||
_P9K_RIGHT_SUFFIX="%{$reset_color%}$_P9K_RIGHT_SUFFIX"
|
||||
|
||||
if [[ $POWERLEVEL9K_PROMPT_ADD_NEWLINE == true ]]; then
|
||||
repeat ${POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT:-1} { _P9K_LEFT_PREFIX=$'\n'$_P9K_LEFT_PREFIX }
|
||||
fi
|
||||
|
||||
# If the terminal `LANG` is set to `C`, this theme will not work at all.
|
||||
if [[ $LANG == C && $POWERLEVEL9K_IGNORE_TERM_LANG == false ]]; then
|
||||
print -P "\t%F{red}WARNING!%f Your terminal's 'LANG' is set to 'C', which breaks this theme!"
|
||||
|
|
Loading…
Reference in a new issue