improve instant prompt usability, update docs and add an option to the wizard to enable it

pull/298/head
romkatv 5 years ago
parent f17081ca98
commit 627d471fca

@ -41,7 +41,7 @@ it will generate the same prompt.
1. [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?](#does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) 1. [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?](#does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config)
1. [Is there an AUR package for Powerlevel10k?](#is-there-an-aur-package-for-powerlevel10k) 1. [Is there an AUR package for Powerlevel10k?](#is-there-an-aur-package-for-powerlevel10k)
1. [I cannot make Powerlevel10k work with my plugin manager. Help!](#i-cannot-make-powerlevel10k-work-with-my-plugin-manager-help) 1. [I cannot make Powerlevel10k work with my plugin manager. Help!](#i-cannot-make-powerlevel10k-work-with-my-plugin-manager-help)
1. [What is the minimum supported ZSH version?](#what-is-the-minimum-supported-zsh-version) 1. [What is the minimum supported zsh version?](#what-is-the-minimum-supported-zsh-version)
## Installation ## Installation
@ -160,7 +160,7 @@ Try Powerlevel10k in Docker. You can safely make any changes to the file system
the theme. Once you exit zsh, the image is deleted. the theme. Once you exit zsh, the image is deleted.
```zsh ```zsh
docker run -e LANG=en_US.utf8 -e TERM -it --rm archlinux/base bash -uexc ' docker run -e TERM -it --rm archlinux/base bash -uexc '
pacman -Sy --noconfirm zsh git pacman -Sy --noconfirm zsh git
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo "source ~/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc echo "source ~/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc
@ -203,44 +203,69 @@ covered by the same license.
## FAQ ## FAQ
### What is instant prompt? ### <a name='instant-prompt'></a>What is instant prompt?
**IMPORTANT UPDATE**: Instant prompt is incompatible with zsh startup configs that may require
console input. This includes asking for a keyring password and *[Y/N]* confirmations. It is
currently **NOT RECOMMENDED** that you enable instant prompt.
*Instant Prompt* is an optional feature of Powerlevel10k. When enabled, it gives you a limited *Instant Prompt* is an optional feature of Powerlevel10k. When enabled, it gives you a limited
prompt within 10 milliseconds of staring zsh, alowing you to start hacking right away while zsh prompt within a few milliseconds of staring zsh, alowing you to start hacking right away while zsh
is initializing. Once the initialization is complete, the full-featured Powerlevel10k will is initializing. Once initialization is complete, the full-featured Powerlevel10k prompt will
seamlessly replace instant prompt. seamlessly replace instant prompt.
When you run `p10k configure`, Powerlevel10k will automatically enable instant prompt for you if You can enable instant prompt either by running `p10k configure` or by manually adding the following
it hasn't been already enabled. You can also enable it manually by adding two code snippets to code snippet at the top of `~/.zshrc`:
`~/.zshrc`.
At the very top of `~/.zshrc`:
```zsh ```zsh
# Enable Powerlevel10k instant prompt. Should stay at the top of ~/.zshrc. # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block, everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi fi
``` ```
And at the very bottom of `~/.zshrc`: It's important that you copy the lines verbatim. Don't replace `source` with something else, don't
call `zcompile`, don't redirect output, etc.
When instant prompt is enabled, for the duration of zsh initialization standard input is redirected
to `/dev/null` and standard output with standard error are redirected to a temporary file. Once zsh
is fully initialized, standard file descriptors are restored and the content of the temporary file
is printed out.
When using instant prompt, you should carefully check any output that appears on zsh startup as it
may indicate that initialization has been altered, or perhaps even broken, by instant prompt.
Initialization code that may require console input, such as asking for a keyring password or for a
*[y/n]* confirmation, must be moved above the instant prompt preamble in `~/.zshrc`. Initialization
code that merely prints to console but never reads from it will work correctly with instant prompt,
although output that normally has colors may appear uncolored. You can either leave it be, suppress
the output, or move it above the instant prompt preamble. Here's an example of `~/.zshrc` that
breaks when instant prompt is enabled.
```zsh ```zsh
# Finalize Powerlevel10k instant prompt. Should stay at the bottom of ~/.zshrc. if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
(( ! ${+functions[p10k-instant-prompt-finalize]} )) || p10k-instant-prompt-finalize source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
keychain id_rsa --agents ssh # asks for password
chatty-script # spams to stdout even when everything is fine
``` ```
It's important that you copy the lines verbatim. Don't replace `source` with something else, don't Fixed version:
call `zcompile`, don't redirect output, etc. Just copy the lines and restart zsh.
```zsh
keychain id_rsa --agents ssh # moved before instant prompt
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
chatty-script >/dev/null # spam output suppressed
```
To disable instant prompt, define `POWERLEVEL9K_DISABLE_INSTANT_PROMPT=true` together with the rest If `POWERLEVEL9K_INSTANT_PROMPT` is unset or set to `verbose`, Powerlevel10k will print a warning
of your `POWERLEVEL9K` parameters. `~/.p10k.zsh` already has a line that you can simply uncomment. when it detects console output during initialization to bring attention to potential issues. You can
silence this warning (without suppressing console output) with `POWERLEVEL9K_INSTANT_PROMPT=quiet`.
This is recommended if some initialization code in `~/.zshrc` prints to console and it's infeasible
to move it above the instant prompt preamble or to suppress its output. You can completely disable
instant prompt with `POWERLEVEL9K_INSTANT_PROMPT=off`. Do this if instant prompt breaks zsh
initialization and you don't know how to fix it.
*NOTE: Instant prompt requires ZSH >= 5.4. It's OK to enable it even when using an older ZSH version *NOTE: Instant prompt requires zsh >= 5.4. It's OK to enable it even when using an older zsh version
but it won't do anything.* but it won't do anything.*
### Why my icons and/or powerline symbols look bad? ### Why my icons and/or powerline symbols look bad?
@ -369,7 +394,7 @@ prompt latency when using Powerlevel10k, please
### Is Powerlevel10k fast to load? ### Is Powerlevel10k fast to load?
Yes, provided that you are using ZSH >= 5.4. Yes, provided that you are using zsh >= 5.4.
Loading time, or time to first prompt, can be measured with the following benchmark: Loading time, or time to first prompt, can be measured with the following benchmark:
@ -440,9 +465,9 @@ echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>! ~/.zshrc
This method of installation won't make anything slower or otherwise sub-par. This method of installation won't make anything slower or otherwise sub-par.
### What is the minimum supported ZSH version? ### What is the minimum supported zsh version?
ZSH 5.1 or newer should work. Zsh 5.1 or newer should work.
However, there are too many version, OS, platform, terminal and option configurations to test. If However, there are too many version, OS, platform, terminal and option configurations to test. If
Powerlevel10k doesn't work for you, please open an issue. Powerlevel10k doesn't work for you, please open an issue.

@ -813,8 +813,17 @@
typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208
typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}' typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'
# When instant prompt is disabled, prompt won't appear until zsh is fully initialized. # Instant prompt mode.
# typeset -g POWERLEVEL9K_DISABLE_INSTANT_PROMPT=true #
# - off: Disable instant prompt. Choose this if you've tried instant prompt and found
# it incompatible with your zsh configuration files.
# - quiet: Enable instant prompt and don't print warnings when detecting console output
# during zsh initialization. Choose this if you've read and understood
# https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
# - verbose: Enable instant prompt and print a warning when detecting console output during
# zsh initialization. Choose this if you've never tried instant prompt, haven't
# seen the warning, or if you are unsure what this all means.
typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose
} }
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} (( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}

@ -793,8 +793,17 @@
typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208
typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}' typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'
# When instant prompt is disabled, prompt won't appear until zsh is fully initialized. # Instant prompt mode.
# typeset -g POWERLEVEL9K_DISABLE_INSTANT_PROMPT=true #
# - off: Disable instant prompt. Choose this if you've tried instant prompt and found
# it incompatible with your zsh configuration files.
# - quiet: Enable instant prompt and don't print warnings when detecting console output
# during zsh initialization. Choose this if you've read and understood
# https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
# - verbose: Enable instant prompt and print a warning when detecting console output during
# zsh initialization. Choose this if you've never tried instant prompt, haven't
# seen the warning, or if you are unsure what this all means.
typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose
} }
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} (( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}

@ -124,6 +124,18 @@
typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1 typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1
# Remove space between '⇣' and '⇡'. # Remove space between '⇣' and '⇡'.
typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${P9K_CONTENT/⇣* ⇡/⇣⇡}' typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${P9K_CONTENT/⇣* ⇡/⇣⇡}'
# Instant prompt mode.
#
# - off: Disable instant prompt. Choose this if you've tried instant prompt and found
# it incompatible with your zsh configuration files.
# - quiet: Enable instant prompt and don't print warnings when detecting console output
# during zsh initialization. Choose this if you've read and understood
# https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
# - verbose: Enable instant prompt and print a warning when detecting console output during
# zsh initialization. Choose this if you've never tried instant prompt, haven't
# seen the warning, or if you are unsure what this all means.
typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose
} }
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} (( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}

@ -839,8 +839,17 @@
# typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=4 # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=4
typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}' typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'
# When instant prompt is disabled, prompt won't appear until zsh is fully initialized. # Instant prompt mode.
# typeset -g POWERLEVEL9K_DISABLE_INSTANT_PROMPT=true #
# - off: Disable instant prompt. Choose this if you've tried instant prompt and found
# it incompatible with your zsh configuration files.
# - quiet: Enable instant prompt and don't print warnings when detecting console output
# during zsh initialization. Choose this if you've read and understood
# https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
# - verbose: Enable instant prompt and print a warning when detecting console output during
# zsh initialization. Choose this if you've never tried instant prompt, haven't
# seen the warning, or if you are unsure what this all means.
typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose
} }
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} (( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}

@ -17,7 +17,6 @@ function _p9k_can_configure() {
(( q )) || print -rP "%1F[ERROR]%f %Bp10k configure%b: $1" >&2 (( q )) || print -rP "%1F[ERROR]%f %Bp10k configure%b: $1" >&2
} }
{ {
[[ -t 0 && -t 1 ]] || { $0_error "no TTY"; return 1 }
[[ -o multibyte ]] || { $0_error "multibyte option is not set"; return 1 } [[ -o multibyte ]] || { $0_error "multibyte option is not set"; return 1 }
[[ -e $__p9k_zd ]] || { $0_error "$__p9k_zd_u does not exist"; return 1 } [[ -e $__p9k_zd ]] || { $0_error "$__p9k_zd_u does not exist"; return 1 }
[[ -d $__p9k_zd ]] || { $0_error "$__p9k_zd_u is not a directory"; return 1 } [[ -d $__p9k_zd ]] || { $0_error "$__p9k_zd_u is not a directory"; return 1 }
@ -53,6 +52,8 @@ function _p9k_can_configure() {
$0_error "terminal size too small; must be at least $__p9k_wizard_columns x $__p9k_wizard_lines" $0_error "terminal size too small; must be at least $__p9k_wizard_columns x $__p9k_wizard_lines"
return 1 return 1
} }
[[ -t 0 && -t 1 ]] || { $0_error "no TTY"; return 2 }
return 0
} always { } always {
unfunction $0_error unfunction $0_error
} }

@ -3502,8 +3502,7 @@ _p9k_dump_instant_prompt() {
[[ -d $prompt_dir ]] || mkdir -p $prompt_dir || return [[ -d $prompt_dir ]] || mkdir -p $prompt_dir || return
[[ -w $root_dir && -w $prompt_dir ]] || return [[ -w $root_dir && -w $prompt_dir ]] || return
if [[ ! -e $root_file || if [[ ! -e $root_file ]]; then
($+__p9k_instant_prompt_sourced == 1 && $__p9k_instant_prompt_sourced != $__p9k_instant_prompt_version) ]]; then
local tmp=$root_file.tmp.$$ local tmp=$root_file.tmp.$$
local -i fd local -i fd
sysopen -a -o creat,trunc -u fd $tmp || return sysopen -a -o creat,trunc -u fd $tmp || return
@ -3513,7 +3512,8 @@ _p9k_dump_instant_prompt() {
(( ! \$+__p9k_instant_prompt_disabled )) || return (( ! \$+__p9k_instant_prompt_disabled )) || return
typeset -gi __p9k_instant_prompt_disabled=1 __p9k_instant_prompt_sourced=$__p9k_instant_prompt_version typeset -gi __p9k_instant_prompt_disabled=1 __p9k_instant_prompt_sourced=$__p9k_instant_prompt_version
[[ -t 0 && -t 1 && -t 2 && \$ZSH_VERSION == ${(q)ZSH_VERSION} && \$ZSH_PATCHLEVEL == ${(q)ZSH_PATCHLEVEL} && [[ -t 0 && -t 1 && -t 2 && \$ZSH_VERSION == ${(q)ZSH_VERSION} && \$ZSH_PATCHLEVEL == ${(q)ZSH_PATCHLEVEL} &&
\$+VTE_VERSION == $+VTE_VERSION && \$POWERLEVEL9K_DISABLE_INSTANT_PROMPT != 'true' ]] || return \$+VTE_VERSION == $+VTE_VERSION && \$POWERLEVEL9K_DISABLE_INSTANT_PROMPT != 'true' &&
\$POWERLEVEL9K_INSTANT_PROMPT != 'off' ]] || return
local -i ZLE_RPROMPT_INDENT=${ZLE_RPROMPT_INDENT:-1} local -i ZLE_RPROMPT_INDENT=${ZLE_RPROMPT_INDENT:-1}
local PROMPT_EOL_MARK=${(q)PROMPT_EOL_MARK-%B%S%#%s%b} local PROMPT_EOL_MARK=${(q)PROMPT_EOL_MARK-%B%S%#%s%b}
[[ -n \$SSH_CLIENT || -n \$SSH_TTY || -n \$SSH_CONNECTION ]] && local ssh=1 || local ssh=0 [[ -n \$SSH_CLIENT || -n \$SSH_TTY || -n \$SSH_CONNECTION ]] && local ssh=1 || local ssh=0
@ -3527,7 +3527,7 @@ _p9k_dump_instant_prompt() {
fi" fi"
>&$fd print -r -- ' >&$fd print -r -- '
zmodload zsh/terminfo zmodload zsh/terminfo
(( $+terminfo[cuu] && $+terminfo[cuf] && $+terminfo[sgr0] && $+terminfo[ed] && $+terminfo[sc] && $+terminfo[rc] )) || return (( $+terminfo[cuu] && $+terminfo[cuf] && $+terminfo[ed] && $+terminfo[sc] && $+terminfo[rc] )) || return
local pwd=${(%):-%/} local pwd=${(%):-%/}
local prompt_file=$prompt_dir/prompt-${#pwd} local prompt_file=$prompt_dir/prompt-${#pwd}
local key=$pwd:$ssh:${(%):-%#} local key=$pwd:$ssh:${(%):-%#}
@ -3541,6 +3541,10 @@ _p9k_dump_instant_prompt() {
if (( $+VTE_VERSION )); then if (( $+VTE_VERSION )); then
>&$fd print -r -- ' >&$fd print -r -- '
if (( LINES == 24 && COLUMNS == 80 )); then if (( LINES == 24 && COLUMNS == 80 )); then
zmodload -F zsh/stat b:zstat
zmodload zsh/datetime
local -a tty_ctime
if ! zstat -A tty_ctime +ctime -- $TTY 2>/dev/null || (( $tty_ctime[1] + 2 > EPOCHREALTIME )); then
zmodload zsh/datetime zmodload zsh/datetime
local -F deadline=$((EPOCHREALTIME+0.025)) local -F deadline=$((EPOCHREALTIME+0.025))
local tty_size local tty_size
@ -3557,6 +3561,7 @@ _p9k_dump_instant_prompt() {
break break
fi fi
done done
fi
fi' fi'
fi fi
>&$fd print -r -- ' typeset -ga __p9k_used_instant_prompt=("${(@e)_p9k_t[-3,-1]}")' >&$fd print -r -- ' typeset -ga __p9k_used_instant_prompt=("${(@e)_p9k_t[-3,-1]}")'
@ -3586,7 +3591,7 @@ _p9k_dump_instant_prompt() {
>&$fd print -r -- ' >&$fd print -r -- '
[[ $PROMPT_EOL_MARK == "%B%S%#%s%b" ]] && _p9k_ret=1 || _p9k_prompt_length $PROMPT_EOL_MARK [[ $PROMPT_EOL_MARK == "%B%S%#%s%b" ]] && _p9k_ret=1 || _p9k_prompt_length $PROMPT_EOL_MARK
local -i fill=$((COLUMNS > _p9k_ret ? COLUMNS - _p9k_ret : 0)) local -i fill=$((COLUMNS > _p9k_ret ? COLUMNS - _p9k_ret : 0))
out+="${(%):-$PROMPT_EOL_MARK${(pl.$fill.. .)}$cr%b%k%f%E}"' out+="${(%):-$PROMPT_EOL_MARK${(pl.$fill.. .)}$cr%b%k%f%s%u%E}"'
(( $+VTE_VERSION )) && >&$fd print -r -- ' fi' (( $+VTE_VERSION )) && >&$fd print -r -- ' fi'
>&$fd print -r -- ' >&$fd print -r -- '
out+="${(pl.$height..$lf.)}$esc${height}A$terminfo[sc]" out+="${(pl.$height..$lf.)}$esc${height}A$terminfo[sc]"
@ -3597,7 +3602,7 @@ _p9k_dump_instant_prompt() {
_p9k_prompt_length "$__p9k_used_instant_prompt[3]" _p9k_prompt_length "$__p9k_used_instant_prompt[3]"
local -i gap=$((COLUMNS - left_len - _p9k_ret - ZLE_RPROMPT_INDENT)) local -i gap=$((COLUMNS - left_len - _p9k_ret - ZLE_RPROMPT_INDENT))
if (( gap >= 40 )); then if (( gap >= 40 )); then
out+="${(pl.$gap.. .)}${(%)${__p9k_used_instant_prompt[3]}}$terminfo[sgr0]$cr$esc${left_len}C" out+="${(pl.$gap.. .)}${(%):-${__p9k_used_instant_prompt[3]}%b%k%f%s%u}$cr$esc${left_len}C"
fi fi
fi fi
typeset -g __p9k_instant_prompt_output=${TMPDIR:-/tmp}/p10k-instant-prompt-output-${(%):-%n}-$$ typeset -g __p9k_instant_prompt_output=${TMPDIR:-/tmp}/p10k-instant-prompt-output-${(%):-%n}-$$
@ -3619,14 +3624,18 @@ _p9k_dump_instant_prompt() {
exec 0<&$__p9k_fd_0 1>&$__p9k_fd_1 2>&$__p9k_fd_2 {__p9k_fd_0}>&- {__p9k_fd_1}>&- {__p9k_fd_2}>&- exec 0<&$__p9k_fd_0 1>&$__p9k_fd_1 2>&$__p9k_fd_2 {__p9k_fd_0}>&- {__p9k_fd_1}>&- {__p9k_fd_2}>&-
unset __p9k_fd_0 __p9k_fd_1 __p9k_fd_2 __p9k_instant_prompt_active unset __p9k_fd_0 __p9k_fd_1 __p9k_fd_2 __p9k_instant_prompt_active
typeset -gi __p9k_instant_prompt_erased=1 typeset -gi __p9k_instant_prompt_erased=1
print -rn -- $terminfo[rc]$terminfo[sgr0]$terminfo[ed] print -rn -- $terminfo[rc]${(%):-%b%k%f%s%u}$terminfo[ed]
if [[ -s $__p9k_instant_prompt_output ]]; then if [[ -s $__p9k_instant_prompt_output ]]; then
cat $__p9k_instant_prompt_output 2>/dev/null cat $__p9k_instant_prompt_output 2>/dev/null
local _p9k_ret
[[ $PROMPT_EOL_MARK == "%B%S%#%s%b" ]] && _p9k_ret=1 || _p9k_prompt_length $PROMPT_EOL_MARK
local -i fill=$((COLUMNS > _p9k_ret ? COLUMNS - _p9k_ret : 0))
echo -nE - "${(%):-$PROMPT_EOL_MARK${(pl.$fill.. .)}$cr%b%k%f%s%u%E}"
fi fi
zmodload -F zsh/files b:zf_rm zmodload -F zsh/files b:zf_rm
zf_rm -f -- $__p9k_instant_prompt_output ${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh{,.zwc} 2>/dev/null zf_rm -f -- $__p9k_instant_prompt_output ${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh{,.zwc} 2>/dev/null
} }
setopt prompt_cr prompt_sp setopt no_local_options prompt_cr prompt_sp
} }
zmodload zsh/sched zmodload zsh/sched
sched +0 _p9k_instant_prompt_sched_last sched +0 _p9k_instant_prompt_sched_last
@ -3771,12 +3780,60 @@ function _p9k_clear_instant_prompt() {
exec 1>&$__p9k_fd_1 2>&$__p9k_fd_2 {__p9k_fd_1}>&- {__p9k_fd_2}>&- exec 1>&$__p9k_fd_1 2>&$__p9k_fd_2 {__p9k_fd_1}>&- {__p9k_fd_2}>&-
unset __p9k_fd_1 __p9k_fd_2 __p9k_instant_prompt_active unset __p9k_fd_1 __p9k_fd_2 __p9k_instant_prompt_active
if [[ -s $__p9k_instant_prompt_output ]]; then if [[ -s $__p9k_instant_prompt_output ]]; then
print -rn -- $terminfo[rc]$terminfo[sgr0]$terminfo[ed] {
cat $__p9k_instant_prompt_output 2>/dev/null local content
zf_rm -f -- $__p9k_instant_prompt_output 2>/dev/null [[ $_POWERLEVEL9K_INSTANT_PROMPT == verbose ]] && content="$(<$__p9k_instant_prompt_output)"
_p9k_prompt_length $PROMPT_EOL_MARK
local -i fill=$((COLUMNS > _p9k_ret ? COLUMNS - _p9k_ret : 0))
local sp="${(%):-$PROMPT_EOL_MARK${(pl.$fill.. .)}$cr%b%k%f%s%u%E}"
print -rn -- $terminfo[rc]${(%):-%b%k%f%s%u}$terminfo[ed]
if [[ -n ${(S)content//$'\e'*$'\a'} ]]; then
echo -E - ""
echo -E - "${(%):-[%3FWARNING%f]: Console output during zsh initialization detected.}"
echo -E - ""
echo -E - "${(%):-When using Powerlevel10k with instant prompt, console output during zsh}"
echo -E - "${(%):-initialization may indicate issues. For details, see:}"
echo - "${(%):-\e]8;;https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt\ahttps://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt\e]8;;\a}"
echo -E - ""
echo -E - "${(%):-You can:}"
echo -E - ""
echo -E - "${(%):- - %BRecommended%b: Change %B$__p9k_zshrc_u%b so that it does not perform console I/O}"
echo -E - "${(%):- after the instant prompt preamble. See the link below for details.}"
echo -E - ""
echo -E - "${(%):- * You %Bwill not%b see this error message again.}"
echo -E - "${(%):- * Zsh will start %Bquickly%b and prompt will update %Bsmoothly%b.}"
echo -E - ""
echo -E - "${(%):- - Suppress this warning either by running %Bp10k configure%b or by manually}"
echo -E - "${(%):- defining the following parameter:}"
echo -E - ""
echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=quiet}"
echo -E - ""
echo -E - "${(%):- * You %Bwill not%b see this error message again.}"
echo -E - "${(%):- * Zsh will start %Bquickly%b but prompt will %Bjump down%b after initialization.}"
echo -E - ""
echo -E - "${(%):- - Disable instant prompt either by running %Bp10k configure%b or by manually}"
echo -E - "${(%):- defining the following parameter:}"
echo -E - ""
echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=off}"
echo -E - ""
echo -E - "${(%):- * You %Bwill not%b see this error message again.}"
echo -E - "${(%):- * Zsh will start %Bslowly%b.}"
echo -E - ""
echo -E - "${(%):- - Do nothing.}"
echo -E - ""
echo -E - "${(%):- * You %Bwill%b see this error message every time you start zsh.}"
echo -E - "${(%):- * Zsh will start %Bquickly%b but prompt will %Bjump down%b after initialization.}"
echo -E - ""
echo - "${(%):-%3F-- console output produced during zsh initialization follows --%f}"
echo -E - ""
fi
cat $__p9k_instant_prompt_output
echo -nE - $sp
zf_rm -f -- $__p9k_instant_prompt_output
} 2>/dev/null
else else
zf_rm -f -- $__p9k_instant_prompt_output 2>/dev/null zf_rm -f -- $__p9k_instant_prompt_output 2>/dev/null
print -rn -- $terminfo[rc]$terminfo[sgr0]$terminfo[ed] print -rn -- $terminfo[rc]${(%):-%b%k%f%s%u}$terminfo[ed]
fi fi
prompt_opts=(percent subst sp cr) prompt_opts=(percent subst sp cr)
if [[ $_POWERLEVEL9K_DISABLE_INSTANT_PROMPT == 0 && -o prompt_cr ]]; then if [[ $_POWERLEVEL9K_DISABLE_INSTANT_PROMPT == 0 && -o prompt_cr ]]; then
@ -3785,10 +3842,10 @@ function _p9k_clear_instant_prompt() {
>&2 echo -E - "" >&2 echo -E - ""
>&2 echo -E - "${(%):-You can:}" >&2 echo -E - "${(%):-You can:}"
>&2 echo -E - "" >&2 echo -E - ""
>&2 echo -E - "${(%):- - %BRecommended%b: call %Bp10k-instant-prompt-finalize%b at the end of %B$__p9k_zshrc_u%b.}" >&2 echo -E - "${(%):- - %BRecommended%b: call %Bp10k finalize%b at the end of %B$__p9k_zshrc_u%b.}"
>&2 echo -E - "${(%):- You can do this by running the following command:}" >&2 echo -E - "${(%):- You can do this by running the following command:}"
>&2 echo -E - "" >&2 echo -E - ""
>&2 echo -E - "${(%):- %2Fecho%f %3F'(( ! \${+functions[p10k-instant-prompt-finalize]\} )) || p10k-instant-prompt-finalize'%f >>! $__p9k_zshrc_u}" >&2 echo -E - "${(%):- %2Fecho%f %3F'(( ! \${+functions[p10k]\} )) || p10k finalize'%f >>! $__p9k_zshrc_u}"
>&2 echo -E - "" >&2 echo -E - ""
>&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}"
>&2 echo -E - "${(%):- * Zsh will start %Bquickly%b and %Bwithout%b prompt flickering.}" >&2 echo -E - "${(%):- * Zsh will start %Bquickly%b and %Bwithout%b prompt flickering.}"
@ -3798,10 +3855,10 @@ function _p9k_clear_instant_prompt() {
>&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}"
>&2 echo -E - "${(%):- * Zsh will start %Bquickly%b and %Bwithout%b prompt flickering.}" >&2 echo -E - "${(%):- * Zsh will start %Bquickly%b and %Bwithout%b prompt flickering.}"
>&2 echo -E - "" >&2 echo -E - ""
>&2 echo -E - "${(%):- - Set %BPOWERLEVEL9K_DISABLE_INSTANT_PROMPT=true%b at the bottom of %B$__p9k_zshrc_u%b.}" >&2 echo -E - "${(%):- - Disable instant prompt either by running %Bp10k configure%b or by manually}"
>&2 echo -E - "${(%):- You can do this by running the following command:}" >&2 echo -E - "${(%):- defining the following parameter:}"
>&2 echo -E - "" >&2 echo -E - ""
>&2 echo -E - "${(%):- %2Fecho%f %3F'POWERLEVEL9K_DISABLE_INSTANT_PROMPT=true'%f >>! $__p9k_zshrc_u}" >&2 echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=off}"
>&2 echo -E - "" >&2 echo -E - ""
>&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}"
>&2 echo -E - "${(%):- * Zsh will start %Bslowly%b.}" >&2 echo -E - "${(%):- * Zsh will start %Bslowly%b.}"
@ -3847,9 +3904,13 @@ _p9k_precmd_impl() {
fi fi
if _p9k_must_init; then if _p9k_must_init; then
local -i instant_prompt_disabled
if (( !__p9k_configured )); then if (( !__p9k_configured )); then
__p9k_configured=1 __p9k_configured=1
if [[ "${parameters[(I)POWERLEVEL9K_*]}" == (POWERLEVEL9K_MODE|) ]] && _p9k_can_configure -q; then if [[ "${parameters[(I)POWERLEVEL9K_*]}" == (POWERLEVEL9K_MODE|) ]]; then
_p9k_can_configure -q
case $? in
0)
( (
local p=("${(@)parameters[(I)AWESOME_*|CODEPOINT_*]}") local p=("${(@)parameters[(I)AWESOME_*|CODEPOINT_*]}")
if (( $#p )); then if (( $#p )); then
@ -3857,13 +3918,22 @@ _p9k_precmd_impl() {
fi fi
"$__p9k_root_dir"/internal/wizard.zsh -d "$__p9k_root_dir" "$__p9k_root_dir"/internal/wizard.zsh -d "$__p9k_root_dir"
) )
if (( ! $? )); then if (( $? )); then
instant_prompt_disabled=1
else
source "$__p9k_cfg_path" source "$__p9k_cfg_path"
_p9k_must_init _p9k_must_init
fi fi
;;
2)
zf_rm -f -- ${__p9k_dump_file:h}/p10k-instant-prompt-${(%):-%n}.zsh{,.zwc} 2>/dev/null
instant_prompt_disabled=1
;;
esac
fi fi
fi fi
_p9k_init _p9k_init
_p9k__instant_prompt_disabled=$((_POWERLEVEL9K_DISABLE_INSTANT_PROMPT || instant_prompt_disabled))
fi fi
if (( _p9k__timer_start )); then if (( _p9k__timer_start )); then
@ -3900,17 +3970,16 @@ _p9k_precmd_impl() {
if (( ! _p9k__dump_pid )) || ! kill -0 $_p9k__dump_pid 2>/dev/null; then if (( ! _p9k__dump_pid )) || ! kill -0 $_p9k__dump_pid 2>/dev/null; then
_p9k__dump_pid=0 _p9k__dump_pid=0
if (( _p9k__prompt_idx == 1 )) then if (( _p9k__prompt_idx == 1 )) then
(( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT )) || _p9k_set_instant_prompt (( _p9k__instant_prompt_disabled )) || _p9k_set_instant_prompt
if (( !_p9k_state_restored )); then if (( !_p9k_state_restored )); then
if (( !_POWERLEVEL9K_DISABLE_INSTANT_PROMPT )); then if (( !_p9k__instant_prompt_disabled )); then
_p9k_dump_instant_prompt _p9k_dump_instant_prompt
_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]=1 _p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]=1
fi fi
_p9k_dump_state _p9k_dump_state
_p9k__state_dump_scheduled=0 _p9k__state_dump_scheduled=0
elif [[ $_POWERLEVEL9K_DISABLE_INSTANT_PROMPT == 0 && elif [[ $_p9k__instant_prompt_disabled == 0 &&
( $+__p9k_instant_prompt_sourced == 1 && $__p9k_instant_prompt_sourced != $__p9k_instant_prompt_version || "${(pj:\x1f:)__p9k_used_instant_prompt}" != "${(e)_p9k_instant_prompt}" ]]; then
"${(pj:\x1f:)__p9k_used_instant_prompt}" != "${(e)_p9k_instant_prompt}" ) ]]; then
_p9k_dump_instant_prompt _p9k_dump_instant_prompt
if (( ! $+_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig] )); then if (( ! $+_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig] )); then
_p9k_dump_state _p9k_dump_state
@ -3918,10 +3987,10 @@ _p9k_precmd_impl() {
_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]=1 _p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]=1
fi fi
fi fi
elif (( _p9k__state_dump_scheduled || ! (_POWERLEVEL9K_DISABLE_INSTANT_PROMPT || $+_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]) )); then elif (( _p9k__state_dump_scheduled || ! (_p9k__instant_prompt_disabled || $+_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]) )); then
setopt no_bg_nice setopt no_bg_nice
( (
if ! (( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT || $+_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig] )); then if ! (( _p9k__instant_prompt_disabled || $+_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig] )); then
_p9k_set_instant_prompt _p9k_set_instant_prompt
_p9k_dump_instant_prompt _p9k_dump_instant_prompt
_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]=1 _p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]=1
@ -3930,7 +3999,7 @@ _p9k_precmd_impl() {
) &! ) &!
_p9k__dump_pid=$! _p9k__dump_pid=$!
_p9k__state_dump_scheduled=0 _p9k__state_dump_scheduled=0
(( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT )) || _p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]=1 (( _p9k__instant_prompt_disabled )) || _p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]=1
fi fi
fi fi
} }
@ -4139,6 +4208,7 @@ function _p9k_prompt_overflow_bug() {
} }
_p9k_init_vars() { _p9k_init_vars() {
typeset -gi _p9k__instant_prompt_disabled
typeset -gi _p9k_non_hermetic_expansion typeset -gi _p9k_non_hermetic_expansion
typeset -g _p9k_time typeset -g _p9k_time
typeset -g _p9k_date typeset -g _p9k_date
@ -4248,7 +4318,20 @@ _p9k_init_vars() {
} }
_p9k_init_params() { _p9k_init_params() {
# invarint: _POWERLEVEL9K_INSTANT_PROMPT == (verbose|quiet|off)
# invariant: [[ ($_POWERLEVEL9K_INSTANT_PROMPT == off) == $_POWERLEVEL9K_DISABLE_INSTANT_PROMPT ]]
_p9k_declare -s POWERLEVEL9K_INSTANT_PROMPT # verbose, quiet, off
if [[ $_POWERLEVEL9K_INSTANT_PROMPT == off ]]; then
typeset -gi _POWERLEVEL9K_DISABLE_INSTANT_PROMPT=1
else
_p9k_declare -b POWERLEVEL9K_DISABLE_INSTANT_PROMPT 0 _p9k_declare -b POWERLEVEL9K_DISABLE_INSTANT_PROMPT 0
if (( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT )); then
_POWERLEVEL9K_INSTANT_PROMPT=off
elif [[ $_POWERLEVEL9K_INSTANT_PROMPT != quiet ]]; then
_POWERLEVEL9K_INSTANT_PROMPT=verbose
fi
fi
_p9k_declare -i POWERLEVEL9K_INSTANT_PROMPT_COMMAND_LINES 3 _p9k_declare -i POWERLEVEL9K_INSTANT_PROMPT_COMMAND_LINES 3
_p9k_declare -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS -- context dir vcs _p9k_declare -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS -- context dir vcs
_p9k_declare -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS -- status root_indicator background_jobs history time _p9k_declare -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS -- status root_indicator background_jobs history time
@ -4854,7 +4937,7 @@ _p9k_must_init() {
'${GITSTATUS_ENABLE_LOGGING}' '${GITSTATUS_DAEMON}' '${GITSTATUS_NUM_THREADS}' '${GITSTATUS_ENABLE_LOGGING}' '${GITSTATUS_DAEMON}' '${GITSTATUS_NUM_THREADS}'
'${DEFAULT_USER}' '${ZLE_RPROMPT_INDENT}' '${P9K_SSH}' '${__p9k_ksh_arrays}' '${DEFAULT_USER}' '${ZLE_RPROMPT_INDENT}' '${P9K_SSH}' '${__p9k_ksh_arrays}'
'${__p9k_sh_glob}' '${options[transient_rprompt]}' '${ITERM_SHELL_INTEGRATION_INSTALLED}' '${__p9k_sh_glob}' '${options[transient_rprompt]}' '${ITERM_SHELL_INTEGRATION_INSTALLED}'
'${PROMPT_EOL_MARK}' '${LANG}' '${LC_ALL}' '${LC_CTYPE}' '${+VTE_VERSION}' 'vb') '${PROMPT_EOL_MARK}' '${LANG}' '${LC_ALL}' '${LC_CTYPE}' 'vc')
IFS=$'\2' param_sig="${(e)param_sig}" IFS=$'\2' param_sig="${(e)param_sig}"
[[ $param_sig == $_p9k__param_sig ]] && return 1 [[ $param_sig == $_p9k__param_sig ]] && return 1
[[ -n $_p9k__param_sig ]] && _p9k_deinit [[ -n $_p9k__param_sig ]] && _p9k_deinit
@ -5145,7 +5228,7 @@ _p9k_init() {
if (( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT )); then if (( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT )); then
unset __p9k_instant_prompt_erased unset __p9k_instant_prompt_erased
zf_rm -f -- $root_dir/p10k-instant-prompt-$user.zsh{,.zwc} 2>/dev/null zf_rm -f -- ${__p9k_dump_file:h}/p10k-instant-prompt-${(%):-%n}.zsh{,.zwc} 2>/dev/null
fi fi
if (( $+__p9k_instant_prompt_erased )); then if (( $+__p9k_instant_prompt_erased )); then
@ -5164,10 +5247,10 @@ _p9k_init() {
>&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}"
>&2 echo -E - "${(%):- * Zsh will start %Bquickly%b.}" >&2 echo -E - "${(%):- * Zsh will start %Bquickly%b.}"
>&2 echo -E - "" >&2 echo -E - ""
>&2 echo -E - "${(%):- - Set %BPOWERLEVEL9K_DISABLE_INSTANT_PROMPT=true%b at the bottom of %B$__p9k_zshrc_u%b.}" >&2 echo -E - "${(%):- - Disable instant prompt either by running %Bp10k configure%b or by manually}"
>&2 echo -E - "${(%):- You can do this by running the following command:}" >&2 echo -E - "${(%):- defining the following parameter:}"
>&2 echo -E - "" >&2 echo -E - ""
>&2 echo -E - "${(%):- %2Fecho%f %3F'POWERLEVEL9K_DISABLE_INSTANT_PROMPT=true'%f >>! $__p9k_zshrc_u}" >&2 echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=off}"
>&2 echo -E - "" >&2 echo -E - ""
>&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}"
>&2 echo -E - "${(%):- * Zsh will start %Bslowly%b.}" >&2 echo -E - "${(%):- * Zsh will start %Bslowly%b.}"
@ -5310,7 +5393,13 @@ typeset -gr __p9k_p10k_configure_usage="Usage: %2Fp10k%f %Bconfigure%b
Run interactive configuration wizard." Run interactive configuration wizard."
typeset -gr __p9k_p10k_finalize_usage="Usage: %2Fp10k%f %Bfinalize%b
Perform the final stage of initialization. Must be called at the very end of zshrc."
function p10k() { function p10k() {
[[ $# != 1 || $1 != finalize ]] || { p10k-instant-prompt-finalize; return }
emulate -L zsh emulate -L zsh
setopt no_hist_expand extended_glob prompt_percent prompt_subst no_aliases setopt no_hist_expand extended_glob prompt_percent prompt_subst no_aliases
@ -5379,6 +5468,10 @@ function p10k() {
return 1 return 1
fi fi
;; ;;
finalize)
print -rP -- $__p9k_p10k_finalize_usage >&2
return 1
;;
*) *)
print -rP -- $__p9k_p10k_usage >&2 print -rP -- $__p9k_p10k_usage >&2
return 1 return 1
@ -5407,5 +5500,9 @@ if [[ $__p9k_dump_file != $__p9k_instant_prompt_dump_file && -n $__p9k_instant_p
zf_rm -f $__p9k_instant_prompt_dump_file 2>/dev/null zf_rm -f $__p9k_instant_prompt_dump_file 2>/dev/null
fi fi
if [[ $+__p9k_instant_prompt_sourced == 1 && $__p9k_instant_prompt_sourced != $__p9k_instant_prompt_version ]]; then
zf_rm -f -- ${__p9k_dump_file:h}/p10k-instant-prompt-${(%):-%n}.zsh{,.zwc} 2>/dev/null
fi
_p9k_init_ssh _p9k_init_ssh
prompt_powerlevel9k_setup prompt_powerlevel9k_setup

@ -1213,6 +1213,50 @@ function ask_empty_line() {
done done
} }
function ask_instant_prompt() {
autoload -Uz is-at-least
if ! is-at-least 5.4; then
instant_prompt=off
return
fi
if (( LINES < 24 )); then
local nl=''
else
local nl=$'\n'
fi
while true; do
clear
flowing -c "%BInstant Prompt Mode%b"
print -n $nl
flowing -c "$(href 'https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt')"
print -P ""
flowing +c -i 5 "%B(1) Off.%b" Disable instant prompt. Choose this if you\'ve tried instant \
prompt and found it incompatible with your zsh configuration files.
print -n $nl
flowing +c -i 5 "%B(2) Quiet.%b" Enable instant prompt and %Bdon\'t print warnings%b when \
detecting console output during zsh initialization. Choose this if you\'ve read and \
understood the documentation linked above.
print -n $nl
flowing +c -i 5 "%B(3) Verbose.%b" Enable instant prompt and %Bprint a warning%b when \
detecting console output during zsh initialization. Choose this if you\'ve never tried \
instant prompt, haven\'t seen the warning, or if you are unsure what this all means.
print -P ""
print -P "(r) Restart from the beginning."
print -P "(q) Quit and do nothing."
print -P ""
local key=
read -k key${(%):-"?%BChoice [123rq]: %b"} || quit -c
case $key in
q) quit;;
r) return 1;;
1) instant_prompt=off; break;;
2) instant_prompt=quiet; break;;
3) instant_prompt=verbose; break;;
esac
done
}
function ask_confirm() { function ask_confirm() {
while true; do while true; do
clear clear
@ -1275,10 +1319,11 @@ function ask_zshrc_edit() {
zshrc_backup= zshrc_backup=
zshrc_backup_u= zshrc_backup_u=
zshrc_has_cfg=0 zshrc_has_cfg=0
zshrc_has_pre=1 zshrc_has_instant_prompt=0
zshrc_has_post=1
write_zshrc=0 write_zshrc=0
[[ $instant_prompt == off ]] && zshrc_has_instant_prompt=1
if [[ -e $__p9k_zshrc ]]; then if [[ -e $__p9k_zshrc ]]; then
zshrc_content="$(<$__p9k_zshrc)" || quit -c zshrc_content="$(<$__p9k_zshrc)" || quit -c
local lines=(${(f)zshrc_content}) local lines=(${(f)zshrc_content})
@ -1293,12 +1338,9 @@ function ask_zshrc_edit() {
fi fi
local pre='${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh' local pre='${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh'
if [[ -n ${(@M)lines:#(#b)[^#]#([^[:IDENT:]]|)source[[:space:]]##($pre|\"$pre\")(|[[:space:]]*|'#'*)} ]]; then if [[ -n ${(@M)lines:#(#b)[^#]#([^[:IDENT:]]|)source[[:space:]]##($pre|\"$pre\")(|[[:space:]]*|'#'*)} ]]; then
zshrc_has_pre=1 zshrc_has_instant_prompt=1
fi
if [[ -n ${(@M)lines:#(#b)[^#]#([^[:IDENT:]]|)p10k-instant-prompt-finalize([^[:IDENT:]]*|)} ]]; then
zshrc_has_post=1
fi fi
(( zshrc_has_cfg && zshrc_has_pre && zshrc_has_post )) && return (( zshrc_has_cfg && zshrc_has_instant_prompt )) && return
fi fi
while true; do while true; do
@ -1487,6 +1529,8 @@ function generate_config() {
(( empty_line )) && sub PROMPT_ADD_NEWLINE true || sub PROMPT_ADD_NEWLINE false (( empty_line )) && sub PROMPT_ADD_NEWLINE true || sub PROMPT_ADD_NEWLINE false
sub INSTANT_PROMPT $instant_prompt
local header=${(%):-"# Generated by Powerlevel10k configuration wizard on %D{%Y-%m-%d at %H:%M %Z}."}$'\n' local header=${(%):-"# Generated by Powerlevel10k configuration wizard on %D{%Y-%m-%d at %H:%M %Z}."}$'\n'
header+="# Based on romkatv/powerlevel10k/config/p10k-$style.zsh" header+="# Based on romkatv/powerlevel10k/config/p10k-$style.zsh"
if [[ $commands[sum] == ('/bin'|'/usr/bin'|'/usr/local/bin')'/sum' ]]; then if [[ $commands[sum] == ('/bin'|'/usr/bin'|'/usr/local/bin')'/sum' ]]; then
@ -1525,25 +1569,22 @@ function change_zshrc() {
{ {
print -n >$tmp || return print -n >$tmp || return
if (( !zshrc_has_pre )); then if (( !zshrc_has_instant_prompt )); then
>>$tmp print -r -- "# Enable Powerlevel10k instant prompt. Should stay at the top of ${(%)__p9k_zshrc_u}. >>$tmp print -r -- "# Enable Powerlevel10k instant prompt. Should stay close to the top of ${(%)__p9k_zshrc_u}.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block, everything else must go below.
if [[ -r \"\${XDG_CACHE_HOME:-\$HOME/.cache}/p10k-instant-prompt-\${(%):-%n}.zsh\" ]]; then if [[ -r \"\${XDG_CACHE_HOME:-\$HOME/.cache}/p10k-instant-prompt-\${(%):-%n}.zsh\" ]]; then
source \"\${XDG_CACHE_HOME:-\$HOME/.cache}/p10k-instant-prompt-\${(%):-%n}.zsh\" source \"\${XDG_CACHE_HOME:-\$HOME/.cache}/p10k-instant-prompt-\${(%):-%n}.zsh\"
fi" || return fi" || return
fi fi
if [[ -n $zshrc_content ]]; then if [[ -n $zshrc_content ]]; then
(( zshrc_has_pre )) || print >>$tmp || return (( zshrc_has_instant_prompt )) || print >>$tmp || return
>>$tmp print -r -- $zshrc_content || return >>$tmp print -r -- $zshrc_content || return
fi fi
if (( !zshrc_has_cfg )); then if (( !zshrc_has_cfg )); then
>>$tmp print -r -- " >>$tmp print -r -- "
# To customize prompt, run \`p10k configure\` or edit ${(%)__p9k_cfg_path_u}. # To customize prompt, run \`p10k configure\` or edit ${(%)__p9k_cfg_path_u}.
[[ ! -f ${(%)__p9k_cfg_path_u} ]] || source ${(%)__p9k_cfg_path_u}" || return [[ ! -f ${(%)__p9k_cfg_path_u} ]] || source ${(%)__p9k_cfg_path_u}" || return
fi
if (( !zshrc_has_post )); then
>>$tmp print -r -- "
# Finalize Powerlevel10k instant prompt. Should stay at the bottom of ${(%)__p9k_zshrc_u}.
(( ! \${+functions[p10k-instant-prompt-finalize]} )) || p10k-instant-prompt-finalize" || return
fi fi
zf_mv -f -- $tmp $__p9k_zshrc || return zf_mv -f -- $tmp $__p9k_zshrc || return
} always { } always {
@ -1568,8 +1609,8 @@ fi
source $__p9k_root_dir/internal/icons.zsh || return source $__p9k_root_dir/internal/icons.zsh || return
while true; do while true; do
local zshrc_content= zshrc_backup= zshrc_backup_u= local instant_prompt=verbose zshrc_content= zshrc_backup= zshrc_backup_u=
local -i zshrc_has_cfg=0 zshrc_has_pre=0 zshrc_has_post=0 write_zshrc=0 local -i zshrc_has_cfg=0 zshrc_has_instant_prompt=0 write_zshrc=0
local POWERLEVEL9K_MODE= style= config_backup= config_backup_u= gap_char=' ' local POWERLEVEL9K_MODE= style= config_backup= config_backup_u= gap_char=' '
local left_subsep= right_subsep= left_tail= right_tail= left_head= right_head= show_time= local left_subsep= right_subsep= left_tail= right_tail= left_head= right_head= show_time=
local -i num_lines=0 empty_line=0 color=2 left_frame=1 right_frame=1 local -i num_lines=0 empty_line=0 color=2 left_frame=1 right_frame=1
@ -1649,6 +1690,7 @@ while true; do
ask_prefixes || continue ask_prefixes || continue
fi fi
ask_confirm || continue ask_confirm || continue
ask_instant_prompt || continue
ask_config_overwrite || continue ask_config_overwrite || continue
ask_zshrc_edit || continue ask_zshrc_edit || continue
break break

Loading…
Cancel
Save